Django 视图函数代码在返回后运行
我有一个Django的视图,看起来是这样的...
def add_user(request): if User.objects.get(username__exact = request.POST['username']): context = { 'message': "Username already taken"} return render_to_response("mytemplate.html", context, RequestContext(request)) newUser = User(username="freeandclearusername") newUser.save() #then other code that is related to setting up a new user.
即使最开始的条件判断失败了,后面的代码还是会继续执行,包括调用“return render_to_response()”。
页面虽然用正确的数据渲染出来了,但在第一次返回之后,数据库里还是会添加其他信息。我原以为“return render_to_response()”之后的代码不会再执行了。
有人能确认或者解释一下这个情况吗?
更新....
好吧,如果我加一个条件判断....
def add_user(request):
if User.objects.get(username__exact = request.POST['username']):
bad_user = True
context = { 'message': "Username already taken"}
return render_to_response("mytemplate.html", context, RequestContext(request))
newUser = User(username="freeandclearusername")
newUser.save()
if bad_user != True:
#then other code that is related to setting up a new user.
context = { 'message': "Username is great!!!!!"}
return render_to_response("mytemplate.html", context, RequestContext(request))
这样就按预期工作了。而且如果我去掉RequestContext(),似乎也能正常工作。
有什么想法吗?我觉得问题可能出在我使用RequestContext的方式上。
2 个回答
0
你说得对,只要你的条件满足,视图会在你的返回语句处退出。还有一个我能想到的,之前没提到的,就是缩进——再检查一下,确保你没有混用制表符和空格。有时候这样会导致一些意想不到的问题。
1
返回语句确实会结束函数的执行。所以如果你看到还有其他代码在运行,那可能是因为:
- 你没有执行返回语句,因此以其他方式产生了输出,或者
- 在函数被调用之前,或者在中间件里,有其他代码在对数据库进行更改。