【问题标题】:Customizing Django 2 authentication and authorisation system自定义 Django 2 身份验证和授权系统
【发布时间】:2019-01-05 05:39:01
【问题描述】:

我正在尝试一些我认为必须如此简单但没有任何效果的东西。

我通过添加到我的 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>

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 我之前的回答不好。你可以试试 django-widget-tweaks。 @Manza
    【解决方案2】:

    您不能像这样在包含上设置参数,这不是它的工作原理。您将需要单独定义登录视图。由于 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}),
    

    【讨论】:

    • 谢谢,我已将这两个路径和导入添加到 urls.py 中,但对页面没有影响
    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多