我用另一个函数包装了django.contrib.auth.views.logout
以添加其他行为。这是我的新logout_page:
views.py
from django.contrib.auth import logout
def logout_page(request, *args, **kwargs):
from django.utils import timezone
user = request.user
profile = user.get_profile()
profile.last_logout = timezone.now()
profile.save()
logout(request, *args, **kwargs)
和
urls.py
(r'^logout/$', 'main.views.logout_page', {'next_page': '/'})
但我收到以下错误:
logout() got an unexpected keyword argument 'next_page'
我不确定为什么' next_page'当logout包含** kwargs时,一个意外的参数,据我所知,从django.contrib.auth注销应该包含这样的参数。来自消息来源:
https://github.com/django/django/blob/master/django/contrib/auth/views.py
def logout(request, next_page=None,
template_name='registration/logged_out.html',
redirect_field_name=REDIRECT_FIELD_NAME,
current_app=None, extra_context=None):
...
我该如何解决这个问题?
答案 0 :(得分:7)
你说的是错误的logout
。
from django.contrib.auth import logout
应该是
from django.contrib.auth.views import logout
答案 1 :(得分:1)
您应该从视图from django.contrib.auth.views import logout
导入注销,而不是from django.contrib.auth import logout
。
侧面注意,对于此类行为,您可能需要使用注销信号。请参阅login logout signals
答案 2 :(得分:0)
我遇到了和你一样的问题,并使用了这个简单的解决方法:
views.py:
def my_logout(request):
# Staff you want to do before logout
from django.http import HttpResponseRedirect
return HttpResponseRedirect("/logout2/")
urls.py:
(r'^logout/$', 'views.my_logout'),
url(r'^logout2/$',
django.contrib.auth.views.logout,
{'template_name': 'logged_out.html'}, # Next page
name='auth_logout'),
答案 3 :(得分:0)
这已成为Django V2的问题。您可以在视图中定义登录和注销功能,然后在URL中调用它们。或者,您可以按照Django文档
中给出的示例进行操作从django.contrib.auth导入视图作为auth_views
path('accounts / login /',auth_views.LoginView.as_view()),