django中的自定义登录URL
Posted
技术标签:
【中文标题】django中的自定义登录URL【英文标题】:Custom login URL in django 【发布时间】:2018-09-07 00:46:59 【问题描述】:我是 django 的新手,我正在研究 Django 中的不同选项。我创建了一个基于类的视图,它需要用户身份验证才能查看网页。我正在使用内置的 LoginView。
当url模式指定如下时
url(r'^login/', auth_views.LoginView.as_view(),name='login'),
已正确重定向到登录页面。
但是当我给予时
url(r'^restaurant/login/', auth_views.LoginView.as_view(),name='login'),
我在尝试访问需要用户身份验证的页面时收到 404。 但是当我在浏览器中手动转到该 url 时,它工作得非常好。 这是为什么?这两种情况都不应该有效吗?
【问题讨论】:
请注意,除了使用include()
时,您的正则表达式应以美元结尾(例如r'^login/$'
和r'^restaurant/login/$'
)。否则,URL 模式将匹配 /restaurant/login/
,但也匹配 /restaurant/login/something-else/
。
【参考方案1】:
不确定我是否完全理解你的问题,试着给出一个愚蠢的答案。
Django 2.1.7
-
在设置中使用命名空间和 URL 名称,如果您有自己的登录视图,只需将 admin 更改为您的 url 命名空间并将您的视图命名为“登录”
# settings.py
LOGIN_URL = 'admin:login'
-
然后
login_required
装饰器将引导您正确的登录页面。
from django.contrib.auth.decorators import login_required
@login_required()
def month_archive(request, year, month):
production_list = Production.objects.month_archive(year, month)
context = 'production_list': production_list
return TemplateResponse(request, 'production/production_list.html', context)
-
如果是基于类的视图,请将装饰器添加到 urls.py
from django.contrib.auth.decorators import login_required
urlpatterns = [
path('', login_required(views.ProductionList.as_view()), name='production-list'),
path('<int:year>/<int:month>/', views.month_archive, name='production-month'),
]
【讨论】:
对于基于类的视图,官方的做法是使用LoginRequiredMixin。【参考方案2】:听起来您需要在设置中设置LOGIN_URL
:
LOGIN_URL = '/restaurant/login/'
或者,最好使用 URL 模式名称,这样您就不必在更改登录 URL 时更新设置
LOGIN_URL = 'login'
【讨论】:
难道 django 不是在寻找 url 的 name 参数中指定的 'login' 然后将其反转为 'restaurant/login' 吗? 我不确定我是否理解您的评论。默认情况下,login_required
重定向到 settings.LOGIN_URL
。但是默认为/accounts/login/
,默认情况下不会反转。以上是关于django中的自定义登录URL的主要内容,如果未能解决你的问题,请参考以下文章
如何将 is_staff 用户重定向到 Django 中的自定义模板?