django中的自定义登录URL

时间:2018-03-28 10:56:54

标签: django django-templates django-views django-urls

我是django的新手,我在Django中熟悉不同的选项。我创建了一个基于类的视图,需要用户身份验证才能查看网页。我正在使用内置的LoginView。

当url模式指定如下

figure {
  margin: 0;
  float: left;
}

.container img {
  width: 45%;
}

figcaption {
  width: 30%;
  float: left;
  clear: right;
  display: inline;
}

.clearfix::after {
  content: “”;
  display: table;
  clear: both;
}

它被正确地重定向到登录页面。

但是当我给出

<div class="container clearfix">
  <figure class="imgcol">
    <figcaption> Experimentation with color and texture. </figcaption>
    <img src="" alt="Irfan Web Developer" />

    <figcaption> Playing with blending mode in photoshop. </figcaption>
    <img src="" alt="Irfan Web Developer" />

    <figcaption> Trying to create 80's style glow. </figcaption>
    <img src="" alt="Irfan Web Developer" />

    <figcaption> Drips created using Photoshop brushes </figcaption>
    <img src="" alt="Irfan Web Developer" />

    <figcaption> Creating shapes using repetition. </figcaption>
    <img src="" alt="Irfan Web Developer" />
  </figure>
</div>

我在尝试访问需要用户身份验证的页面时收到404。 但是当我在浏览器中手动转到该URL时,它的工作原理非常好。 这是为什么?这两种情况都不适用吗?

2 个答案:

答案 0 :(得分:0)

听起来您需要在设置中设置LOGIN_URL

LOGIN_URL = '/restaurant/login/'

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

LOGIN_URL = 'login'

答案 1 :(得分:0)

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

  

Django 2.1.7

  1. 在设置中使用名称空间和网址名称,如果您拥有自己的登录视图,只需将 admin 更改为您的网址名称空间,然后将视图命名为“登录”
# 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'),
]