如何在django中注销?

Nur*_*yev 9 python django

HTML代码

{% if request.user %}
    <a href="{% url 'main:logout' %}">
        ?????
    </a>
{% else %}
    <a href="{% url 'main:registration' %}">
        ???????????
    </a>
{% endif%}    
Run Code Online (Sandbox Code Playgroud)

settings.py

LOGIN_REDIRECT_URL = 'main/index'
Run Code Online (Sandbox Code Playgroud)

views.py

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

urls.py

from django.conf.urls import url
from . import views
from django.conf import settings

urlpatterns = [
    url(r'^logout/$', views.logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout')
]
Run Code Online (Sandbox Code Playgroud)

怎么了?

在此输入图像描述

小智 14

Django 2.0它看起来像是切换到基于类的视图

from django.contrib.auth.views import LogoutView

url(r'^logout/$', LogoutView.as_view(), {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'),
Run Code Online (Sandbox Code Playgroud)


mil*_*kic 6

您正在使用不带next_page参数的自定义注销视图.您应该将它作为参数添加到视图中并传递给django logout调用,或者只使用django.contrib.auth.logout

例如在urls.py中:

from django.conf.urls import url
from django.conf import settings
from django.contrib.auth.views import logout

urlpatterns = [
    url(r'^logout/$', logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout')
]
Run Code Online (Sandbox Code Playgroud)

  • 这已经过时了。 (2认同)

kha*_*ldi 6

对于 Django 2.2.x 或更高版本,如果您使用path而不是url,则只需LogoutViewdjango.contrib.auth.viewsin导入即可urls.py

from django.contrib.auth.views import LogoutView
Run Code Online (Sandbox Code Playgroud)

然后添加以下路径urlpatterns

path("logout/", LogoutView.as_view(), name="logout"),
Run Code Online (Sandbox Code Playgroud)

注意:注销后需要进行LOGOUT_REDIRECT_URL = "my_url"重定向。settings.py