Django独立Auth应用中如何配置/logout路由?
解决方案
分两种场景来配置,根据你需要的logout路径来选择:
场景1:将logout绑定到 /auth/logout(推荐,符合现有路由结构)
这种方式会让logout路径继承Auth应用的/auth前缀,不需要修改主路由,只需要在Auth应用自身的urls.py中添加路由规则:
先在Auth应用的
views.py中实现(或导入)logout视图:
如果你需要自定义logout逻辑:from django.contrib.auth import logout from django.shortcuts import redirect from django.views.decorators.csrf import csrf_protect @csrf_protect # 记得加CSRF保护,避免跨站请求 def log_out(request): if request.method == 'POST': logout(request) return redirect('auth:auth') # 跳转回登录页,可根据需求修改目标路径 # 如果是GET请求,重定向到登录页或提示用POST return redirect('auth:auth')或者直接使用Django内置的LogoutView(更安全,推荐):
from django.contrib.auth.views import LogoutView修改Auth应用的
urls.py,添加logout路由:from django.conf.urls import url from . import views # 如果用内置视图,导入:from django.contrib.auth.views import LogoutView urlpatterns = [ url(r'^$', views.log_in, name='auth'), # 新增logout路由,匹配/auth/logout路径 url(r'^logout/$', views.log_out, name='logout'), # 如果用内置视图,替换成: # url(r'^logout/$', LogoutView.as_view(next_page='/auth/'), name='logout'), ]
之后你可以通过/auth/logout访问该视图,反向解析时用{% url 'auth:logout' %}(模板中)或reverse('auth:logout')(代码中)。
场景2:将logout绑定到根路径 /logout
如果确实需要直接通过/logout访问Auth应用的logout视图,需要在主项目的urls.py中直接添加一条路由规则:
确保Auth应用的
views.py中已经实现了logout视图(同上)。修改主项目的
urls.py:from django.conf.urls import url, include from django.contrib import admin # 导入Auth应用的视图 from auth import views as auth_views # 如果用内置视图,直接导入:from django.contrib.auth.views import LogoutView urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^auth/', include('auth.urls', namespace='auth'), name='auth'), # 新增根路径的logout路由 url(r'^logout/$', auth_views.log_out, name='logout'), # 如果用内置视图,替换成: # url(r'^logout/$', LogoutView.as_view(next_page='/auth/'), name='logout'), ... ]
这种情况下,访问/logout即可触发视图,反向解析时直接用{% url 'logout' %}或reverse('logout')。
注意事项
- 你的应用命名为
auth可能会和Django内置的django.contrib.auth应用冲突,建议将应用重命名为accounts、myauth这类自定义名称,避免后续出现导入或命名问题。 - 处理logout请求时,推荐使用POST方法并开启CSRF保护,防止恶意站点伪造logout请求。
内容的提问来源于stack exchange,提问作者袗泄写邪褉 袦褍谢褞泻芯胁
相关产品推荐
相关产品推荐

