为什么这会进入无限循环,'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()
我真的无法想象造成这种情况的原因。
答案 0 :(得分:15)
你写过:
def logout(request):
logout(request)
表示您调用视图本身 - 而不是logout
函数。
你可以写下来解决这个问题:
from django.contrib import auth
# ...
def logout(request):
auth.logout(request)
# ...
此外,您不必编写自己的注销视图 - 默认情况下已将其指定为django.contrib.auth.views.logout。