django视图函数代码在返回后运行

时间:2009-09-24 18:56:09

标签: python django views

我有一个看起来像......的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()”之后的代码不会运行。

任何人都可以确认或解释这个吗?

... UPDATE

好的,如果我添加条件......

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))

这表现得如预期。此外,如果我删除RequestConext()它似乎也表现正常。

有什么想法吗?我认为问题在于我如何使用RequestContext。

2 个答案:

答案 0 :(得分:1)

return语句确实会终止该函数。因此,如果您看到其他代码正在执行,您可以

  • 不执行return语句,因此以不同的方式生成输出,或
  • 有其他代码(在调用函数之前,或在中间件中)使数据库发生更改。

答案 1 :(得分:0)

您是对的,假设您的条件得到满足,视图将在您的退货声明中退出。我还没有提到的另一件事就是缩进 - 仔细检查你没有标签和空格的混合。这有时会导致意外。