如何在 Django 中自定义默认的 auth 登录表单? [英] How to customize default auth login form in Django?

查看:22
本文介绍了如何在 Django 中自定义默认的 auth 登录表单?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何自定义 Django 中的默认登录表单?

# demo_project/urls.py从 django.contrib 导入管理员从 django.urls 导入包含,路径网址模式 = [path('', include('pages.urls')),path('users/', include('users.urls')), # newpath('users/', include('django.contrib.auth.urls')), # new路径('管理员/',admin.site.urls),]<!-- templates/registration/login.html --><h2>登录</h2><form method="post">{% csrf_token %}{{ form.as_p }}<button type="submit">登录</button></表单>

以上代码有效,但我需要自定义该 {{form.as_p}} 该表单在哪里或可以被覆盖?感谢您的帮助.

解决方案

您可以覆盖默认的身份验证表单

喜欢这个

from django.contrib.auth.forms import AuthenticationForm, UsernameField从 Django 导入表单类 UserLoginForm(AuthenticationForm):def __init__(self, *args, **kwargs):super(UserLoginForm, self).__init__(*args, **kwargs)username = UsernameField(widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': '', 'id': 'hello'}))密码 = forms.CharField(widget=forms.PasswordInput(属性={'class': '表单控件','占位符':'','id': '嗨',}))

在 url.py 中,您可以像这样传递这个自定义身份验证表单

from django.contrib.auth 导入视图从 myapp.forms 导入 UserLoginForm网址模式 = [小路('登录/',views.LoginView.as_view(template_name="login.html",authentication_form=用户登录表单),名称='登录')]

此外,您可以覆盖登录模板

并根据您的要求自定义模板

{{ form.non_field_errors }}<div class="form-group"><label for="{{ form.username.id_for_label }}">用户名:</label>{{ 表单.用户名 }}{{ form.username.errors }}

<div class="form-group"><label for="{{ form.password.id_for_label }}">密码:</label>{{ 表单.密码 }}{{ form.password.errors }}

<button type="submit">登录</button></表单>

How do you customize the default login form in Django?

# demo_project/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('', include('pages.urls')),
    path('users/', include('users.urls')), # new
    path('users/', include('django.contrib.auth.urls')), # new
    path('admin/', admin.site.urls),
]

<!-- templates/registration/login.html -->
    <h2>Login</h2>
    <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Login</button>
    </form>

Above code works but I need to customize that {{form.as_p}} Where is that form or can it be override? Thanks for the help.

解决方案

you can overide default Authentication form

like this

from django.contrib.auth.forms import AuthenticationForm, UsernameField

from django import forms


class UserLoginForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        super(UserLoginForm, self).__init__(*args, **kwargs)

    username = UsernameField(widget=forms.TextInput(
        attrs={'class': 'form-control', 'placeholder': '', 'id': 'hello'}))
    password = forms.CharField(widget=forms.PasswordInput(
        attrs={
            'class': 'form-control',
            'placeholder': '',
            'id': 'hi',
        }
))

in url.py you can pass this custom authentication form like this

from django.contrib.auth import views

from myapp.forms import UserLoginForm
urlpatterns = [

    path(
        'login/',
        views.LoginView.as_view(
            template_name="login.html",
            authentication_form=UserLoginForm
            ),
        name='login'
)
]

also, you can override the login template

and customize the template as per you requirement

<form method="post">
    {{ form.non_field_errors }}
    <div class="form-group">
        
        <label for="{{ form.username.id_for_label }}">Username:</label>
        {{ form.username }}
        {{ form.username.errors }}

    </div>
    <div class="form-group">
       
        <label for="{{ form.password.id_for_label }}">Password:</label>
        {{ form.password }}
        {{ form.password.errors }}
    </div>
    <button type="submit">Login</button>
</form>

这篇关于如何在 Django 中自定义默认的 auth 登录表单?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
Python最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆