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

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

问题描述

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

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>

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

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

像这样

from django.contrib.auth.forms import AuthenticationForm

from django import forms


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

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


url.py中的

可以通过django.contrib通过这样的自定义身份验证表单

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'
)
]

也可以覆盖登录模板

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

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中自定义默认身份验证登录表单?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆