在Django中使用内置的重置密码和修改密码时,如何显示错误信息?



我正在使用Django内置功能处理一些用户忘记密码以及密码重置,但我正在使用我的模板来渲染页面和表单。我希望有一种方式来呈现消息错误或成功消息,以便用户理解发生了什么,如果密码太短或左右。

urls . py

from django.urls import path
from . import views
from django.contrib.auth import views as auth_views
urlpatterns = [
path('', views.Dashboard, name='dashboard'),
path('login/', views.Login, name='login'),
path('logout/', views.Logout, name='logout'),
path('register/', views.Register, name='register'),
path('forgetpassword/', views.ForgetPassword, name='forgetpassword'),
path('password_change/', auth_views.PasswordChangeView.as_view(
template_name='auth/password/change-password.html'), name='password_change'),
path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(
template_name='auth/password/change-password-done.html'), name='password_change_done'),

change-password.html

{% extends 'auth/base.html' %}
{% load static %}
{% block content %}
<div class="page-wrapper" style="height: 100vh!important;">
<div class="page-content--bge5">
<div class="container">
<div class="login-wrap">
<div class="login-content">
<div class="login-logo">
<a href="#">
<img src="{% static 'images/icon/logo-new.png' %}" alt="CoolAdmin">
</a>
</div>
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{message.tags}} with-close alert-dismissible fade show">
{{message}}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endfor %}
{% endif %}
<div class="login-form">
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label>Current Password</label>
<input class="au-input au-input--full" type="password" name="old_password" id="id_old_password" placeholder="Current Password" required>
</div>
<div class="form-group">
<label>New Password</label>
<input class="au-input au-input--full" type="password" name="new_password1" id="id_new_password1" placeholder="New Password" required>
</div>
<div class="form-group">
<label>New Password</label>
<input class="au-input au-input--full" type="password" name="new_password2" id="id_new_password2" placeholder="New Password" required>
</div>
<button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">Change Password</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

表单已经在它的实例中有错误。由于某些原因,人们使用消息框架来显示错误,这实际上比简单地在模板中使用表单要困难得多。视图将表单实例传递给你的模板,这样你就可以用它来呈现表单和它的错误。在你的模板中试试:

显示非字段错误:

{% for error in form.non_field_errors %}
{{ error }}
{% endfor %}

使用form.field_name.errors:

显示字段错误
{% for error in form.new_password1.errors %}
{{ error }}
{% endfor %}
手工呈现表单(通过自己编写标签<input ....>)毫无理由地增加了制作表单的难度。也许有人不喜欢使用默认呈现的表单,但是有一些方法可以在表单的类或使用某些包中自定义它。参考django-widget-tweak和django-crisp -forms这两个很棒的包来定制表单呈现。

我按照前面的答案解决了这个问题。我在HTML中添加了错误标签,使其工作完美,并使用一些样式很好地显示错误。

{% for error in form.old_password.errors %}
<div class="alert alert-danger with-close alert-dismissible fade show">
{{error}}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endfor %}
{% for error in form.new_password1.errors %}
<div class="alert alert-danger with-close alert-dismissible fade show">
{{error}}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endfor %}
{% for error in form.new_password2.errors %}
<div class="alert alert-danger with-close alert-dismissible fade show">
{{error}}
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
{% endfor %}
<div class="login-form">
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label>Current Password</label>
<input class="au-input au-input--full" type="password" name="old_password" id="id_old_password" placeholder="Current Password" required>
</div>
<div class="form-group">
<label>New Password</label>
<input class="au-input au-input--full" type="password" name="new_password1" id="id_new_password1" placeholder="New Password" required>
</div>
<div class="form-group">
<label>New Password</label>
<input class="au-input au-input--full" type="password" name="new_password2" id="id_new_password2" placeholder="New Password" required>
</div>
<button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">Change Password</button>
</form>
</div>

我用{% if %}添加了一个增量,只有在出现错误时才会出现

{% if form.new_password1.errors %}
{% for error in form.new_password1.errors %}
<div class="alert alert-danger with-close alert-dismissible fade show">
{{error}}
</div>
{% endfor %}
{% endif %}
{% if form.new_password2.errors %}
{% for error in form.new_password2.errors %}
<div class="alert alert-danger with-close alert-dismissible fade show">
{{error}}
</div>
{% endfor %}
{% endif %}

最新更新