如何在 Django 中自定义默认的 auth 登录表单? [英] How to customize default auth login form in Django?
问题描述
如何自定义 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=用户登录表单),名称='登录')]
此外,您可以覆盖登录模板
并根据您的要求自定义模板
<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屋!