自定义Django 2身份验证和授权系统

时间:2018-07-28 07:25:43

标签: python django python-3.x django-2.0

我正在尝试一些我认为必须很简单但没有任何效果的事情。

我通过添加到urls.py中添加了身份验证:

path('accounts/', include('django.contrib.auth.urls'), {'template_name': 'login.html', 'authentication_form': forms.LoginForm}),

这是我的urls.py:

from django.contrib import admin
from django.urls import path, include
from reports import views, forms

urlpatterns = [
    path('', views.IndexView.as_view(), name='home'),
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls'), {'template_name': 'login.html', 'authentication_form': forms.LoginForm}),

]

我的项目有一个名为“报告”的应用程序,在这里,我有我的模板文件夹,并在我的注册文件夹中添加了login.html和所有相关文件。

我还在项目中(报告)创建了一个forms.py文件并添加了

from django.contrib.auth.forms import AuthenticationForm
# from django import forms

class LoginForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(
        attrs={
        'class':'form-control',
        'placeholder':'Username'
        }
    ))
    password = forms.CharField(widget=forms.PasswordInput(
        attrs={
        'class':'form-control',
        'placeholder':'Password'
        }
    ))

显示我的表单,但未添加类和占位符

关于我需要添加或更改的任何建议吗?

我当前的login.html

<form class="form-signin" method="post">
  {% csrf_token %} 
  {{ form.as_p }}
  <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  <p class="mt-5 mb-3 text-muted">
    <a href="{% url 'password_reset' %}">Lost password?</a>
  </p>
</form>

2 个答案:

答案 0 :(得分:0)

您不能在这样的包含上设置参数,这不是它的工作原理。您将需要单独定义登录视图。由于Django的URL解析的工作方式,只要您先定义更具体的URL,它将与后来的更通用的URL匹配。所以:

from django.contrib.auth import views as auth_views

path('accounts/login', auth_views.LoginView.as_view(),  {'template_name': 'login.html', 'authentication_form': forms.LoginForm}, name='login'),
path('accounts/', include('django.contrib.auth.urls'), {'template_name': 'login.html', 'authentication_form': forms.LoginForm}),

答案 1 :(得分:-1)

更新:查看AuthenticationForm的源代码,usernamepassword是类变量。它们可能会在初始化期间设置为其默认值。您可以使用django-widget-tweaks。然后,您可以渲染这两个字段:

{% load widget_tweaks %}
<form class="form-signin form-group" method="post">
    {% csrf_token %} 
    <label>{{ form.username.label_tag }}</label>
    {% render_field form.username class+='form-control' placeholder='Username' %}
    <label>{{ form.password.label_tag }}</label>
    {% render_field form.password class+='form-control' placeholder='Password' %}
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>

https://github.com/jazzband/django-widget-tweaks