3

を別の関数でラップして、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'

logoutに**kwargsが含まれているのに、なぜ'next_page'が予期しない引数であるのかわかりません。私が知る限り、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):
...

どうすればこれを解決できますか?

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

私はあなたと同じ問題を抱えており、この簡単な回避策を使用しました:

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'),
于 2013-04-19T20:28:22.847 に答える
0

これは、DjangoV2で問題になっています。ビューでログイン関数とログアウト関数を定義し、URLでそれらを呼び出すことができます。または、Djangoドキュメントに記載されている例に従うこともできます

django.contrib.authからビューをauth_viewsとしてインポートします

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

于 2018-10-07T11:28:46.107 に答える