django中的自定义登录URL

问题描述 投票:1回答:2

我是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时,它的工作原理非常好。这是为什么?这两种情况都不应该起作用吗?

django django-templates django-views django-urls
2个回答
1
投票

听起来你需要在你的设置中设置LOGIN_URL

LOGIN_URL = '/restaurant/login/'

或者,最好使用URL模式名称,然后在更改登录URL时不必更新设置

LOGIN_URL = 'login'

1
投票

不确定我是否完全理解你的问题,只是试着给出一个愚蠢的答案。

Django 2.1.7

  1. 在设置中使用namespace和url name,如果您有自己的登录视图,只需将admin更改为您的url命名空间并将您的视图命名为'login'
# settings.py
LOGIN_URL = 'admin:login'
  1. 那么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)
  1. 如果是基于类的视图,请将装饰器添加到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'),
]
© www.soinside.com 2019 - 2024. All rights reserved.