Django注销无限循环?

时间:2010-02-22 02:53:36

标签: django

为什么这会进入无限循环,'TESTING'永远不会被打印出来?似乎logout函数导致页面重定向到自身,但documentation suggests可以在调用该函数后自行重定向

def logout(request):
    logout(request)
    print 'TESTING'
    messages.success(request, 'Logged out.')
    return HttpResponseRedirect(request.GET['next'] or reverse('home'))

如果此注销功能具有一些隐藏的重定向功能,是否有其他方法可以将用户注销?


刚看了一下源代码,没有什么可疑的:

def logout(request):
    """
    Removes the authenticated user's ID from the request and flushes their
    session data.
    """
    request.session.flush()
    if hasattr(request, 'user'):
        from django.contrib.auth.models import AnonymousUser
        request.user = AnonymousUser()

我真的无法想象造成这种情况的原因。

1 个答案:

答案 0 :(得分:15)

你写过:

def logout(request):
    logout(request)

表示您调用视图本身 - 而不是logout函数。

你可以写下来解决这个问题:

from django.contrib import auth
# ...
def logout(request):
    auth.logout(request)
    # ...

此外,您不必编写自己的注销视图 - 默认情况下已将其指定为django.contrib.auth.views.logout