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

0 投票
2 回答
1334 浏览
提问于 2025-04-15 14:35

我有一个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

返回语句确实会结束函数的执行。所以如果你看到还有其他代码在运行,那可能是因为:

  • 你没有执行返回语句,因此以其他方式产生了输出,或者
  • 在函数被调用之前,或者在中间件里,有其他代码在对数据库进行更改。

撰写回答