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()”之后的代码不会运行。

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

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。


return语句确实会终止函数。 所以如果你看到其他代码被执行,你也是

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

  • 你是对的,假设你的条件得到满足,视图将退出你的返回声明。 我能想到的唯一的其他事情还没有被提及是缩进 - 仔细检查你没有混合的制表符和空格。 这有时会导致意外情况。

    链接地址: http://www.djcxy.com/p/56503.html

    上一篇: django view function code runs after return

    下一篇: input: Drag/Drop several directories (multiline)?