3

django.contrib.auth.views.logout用另一个函数包装了它以添加其他行为。这是我的新 logout_page:

视图.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)

网址.py

(r'^logout/$', 'main.views.logout_page', {'next_page': '/'})

但我收到以下错误:

logout() got an unexpected keyword argument 'next_page'

当注销包含 **kwargs 并且据我所知,从 django.contrib.auth 注销时,我不确定为什么 'next_page' 是一个意外参数。从来源:

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):
...

我该如何解决这个问题?

4

4 回答 4

6

你叫错了logout

from django.contrib.auth import logout

应该

from django.contrib.auth.views import logout
于 2012-08-05T05:19:37.000 回答
1

您应该从视图导入注销from django.contrib.auth.views import logout,而不是from django.contrib.auth import logout.

附带说明,对于这种行为,您可能需要使用注销信号。参考登录注销信号

于 2012-08-05T05:24:47.203 回答
0

我遇到了和你一样的问题,并使用了这个简单的解决方法:

视图.py:

def my_logout(request):
    # Staff you want to do before logout
    from django.http import HttpResponseRedirect
    return HttpResponseRedirect("/logout2/")

网址.py:

(r'^logout/$', 'views.my_logout'),
url(r'^logout2/$',
    django.contrib.auth.views.logout,
    {'template_name': 'logged_out.html'},  # Next page
    name='auth_logout'),
于 2013-04-19T20:28:22.847 回答
0

这已经成为 Django V2 的一个问题。您可以在视图中定义登录和注销功能并在 url 中调用它们。或者您可以按照 Django 文档中给出的示例进行操作

从 django.contrib.auth 导入视图作为 auth_views

path('accounts/login/', auth_views.LoginView.as_view()),

于 2018-10-07T11:28:46.107 回答