如何在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}},该表格在哪里或可以覆盖?感谢您的帮助。
答案 0 :(得分:1)
您可以覆盖默认的身份验证表单
喜欢
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中,您可以像这样通过此自定义身份验证表单
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'
)
]
此外,您可以覆盖登录模板
并根据您的要求自定义模板
<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>
答案 1 :(得分:1)
您可以通过覆盖/编辑如下的 templates / registration / login.html 来自定义表单呈现。
这仅是示例,您可以根据需要更改css样式和格式。
<h2>Login</h2>
<form method="post">
{{ form.non_field_errors }}
<div class="fieldWrapper">
{{ form.username.errors }}
<label for="{{ form.username.id_for_label }}">Username:</label>
{{ form.username }}
</div>
<div class="fieldWrapper">
{{ form.password.errors }}
<label for="{{ form.password.id_for_label }}">Password:</label>
{{ form.password }}
</div>
<button type="submit">Login</button>
</form>
您还可以遍历表单的字段
<h2>Login</h2>
<form method="post">
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
<button type="submit">Login</button>
</form>
您还可以从more form rendering options中检查here
答案 2 :(得分:1)
从问题出发,我假设您想更改html模板的外观,而不是python表单类。在这种情况下,您需要做的就是包括输入类型字段,这些字段具有与django-auth默认表单期望的名称和ids属性匹配的属性。您可以使用以下步骤来实现。
它类似于以下内容:
<form method="POST">
{% csrf_token %}
<input type="input" class="form-control" name="username" id="inputEmail" placeholder="Username" required >
<input type="password" class="form-control" name="password" id="inputPass" placeholder="Password" required>
<button type="submit" style="opacity: 1 !important;">Login</button>
<a href="/password_reset">Reset Password</a>
</form>
之后,您可以发挥想象力,并根据需要设计登录表单。
希望这会有所帮助。