Django注销无限循环?

mpe*_*pen 2 django

为什么这会进入无限循环,并且"TESTING"永远不会被打印出来?似乎该logout函数导致页面重定向到自身,但文档建议您可以调用该函数放置自己的重定向.

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

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


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

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()
Run Code Online (Sandbox Code Playgroud)

我真的无法想象是什么导致了这一点.

Daw*_*wid 15

你写:

def logout(request):
    logout(request)
Run Code Online (Sandbox Code Playgroud)

这意味着你调用视图本身 - 而不是logout函数.

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

from django.contrib import auth
# ...
def logout(request):
    auth.logout(request)
    # ...
Run Code Online (Sandbox Code Playgroud)

此外,您不必编写自己的注销视图 - 默认情况下它已作为django.contrib.auth.views.logout提供.

  • 哦...哈哈哈哈...我是个白痴>。<谢谢。我什至让它们排成一排,一个排在另一个排的下方,这对我来说从来没有发生过。 (2认同)