如何屏蔽Django django-allauth默认的登录、注册URL路径
屏蔽django-allauth默认登录注册路径的解决方法
默认路由可访问的核心原因是你默认引入了allauth的全量account路由,可通过以下两种方案解决:
方案1:取消全量引入allauth路由,按需注册
如果除了自定义的登录、注册路由外,你不需要用到allauth的其他默认路由(如密码重置、邮箱验证等),或者只需要部分路由,直接删除代码中全量引入allauth的配置即可:
# 删掉这行全量引入的代码 # path('accounts/', include('allauth.account.urls'))
之后你需要用到的allauth其他功能路由,单独手动注册到urlpatterns中,默认的登录、注册路由自然就不会生效。
方案2:覆盖默认路由(适用于需要保留其他allauth默认路由的场景)
如果你需要用到allauth的其他默认路由,不想单独逐个注册,可以利用Django路由从上到下匹配的优先级,在全量引入allauth路由之前,先覆盖默认的登录、注册路径,可选择重定向到自定义路径或者直接返回404:
from django.views.generic import RedirectView from django.http import Http404 from allauth.account.views import LoginView, SignupView urlpatterns = [ # 你的自定义路由 url(r'^customurl/login/', LoginView.as_view(), name="custom_login" ), # 注意你原配置里的name拼写错误,singup应为signup url(r'^customurl/signup/', SignupView.as_view(), name="custom_signup" ), # 覆盖默认路径,放在引入allauth路由之前 # 选择1:永久重定向到自定义路径 url(r'^accounts/login/$', RedirectView.as_view(pattern_name='custom_login', permanent=True)), url(r'^accounts/signup/$', RedirectView.as_view(pattern_name='custom_signup', permanent=True)), # 选择2:直接返回404 # url(r'^accounts/login/$', lambda request: raise Http404()), # url(r'^accounts/signup/$', lambda request: raise Http404()), # 最后再引入allauth的其他路由 path('accounts/', include('allauth.account.urls')), ... ]
补充配置
修改settings.py的allauth配置,让allauth内部跳转逻辑直接使用你自定义的路径:
# settings.py ACCOUNT_LOGIN_URL = '/customurl/login/' ACCOUNT_SIGNUP_URL = '/customurl/signup/'
内容的提问来源于stack exchange,提问作者Taher
相关产品推荐
相关产品推荐

