Django 管理员添加功能:密码确认、表单验证及错误处理
Django 管理员添加功能:密码确认、表单验证及错误处理
本示例演示如何使用 Django 的 forms.ModelForm 实现管理员添加功能,包含密码确认、表单验证和错误处理,并提供相应的 HTML 模板渲染。
代码示例:
from django import forms
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.shortcuts import render, redirect
class AdminModelForm(forms.ModelForm):
confirm_password = forms.CharField(label='确认密码', widget=forms.PasswordInput(render_value=True))
class Meta:
model = User
fields = ['username', 'password']
widgets = {
'password': forms.PasswordInput(render_value=True),
'username': forms.TextInput(attrs={'class': 'form-control'}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field_name in self.fields:
field = self.fields[field_name]
field.widget.attrs.update({'class': 'form-control'})
def clean_confirm_password(self):
password = self.cleaned_data.get('password')
confirm_password = self.cleaned_data.get('confirm_password')
if confirm_password != password:
raise ValidationError('密码不一致,请重新输入')
return confirm_password
def admin_add(request):
'''添加管理员'''
title = '新建管理员'
if request.method == 'GET':
form = AdminModelForm()
return render(request, 'change.html', {'form': form, 'title': title})
form = AdminModelForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('admin_list')
else:
errors = form.errors.as_data()
return render(request, 'change.html', {'title': title, 'form': form, 'errors': errors})
代码解析:
-
AdminModelForm类- 继承自
forms.ModelForm,用于创建管理员添加表单。 - 添加了一个
confirm_password字段,用于确认密码,并使用forms.PasswordInput作为输入框,确保密码以隐藏形式输入。 - 在
Meta类中定义了模型、字段和输入框配置。 - 使用
__init__方法为所有字段添加form-control类名,方便 CSS 样式的应用。 clean_confirm_password方法验证密码的一致性,如果两次输入的密码不一致,则抛出ValidationError。
- 继承自
-
admin_add函数- 接收 HTTP 请求,根据请求方法处理数据。
- 如果请求方法为 GET,则创建
AdminModelForm对象,并渲染change.html模板。 - 如果请求方法为 POST,则使用
AdminModelForm对象处理提交的数据,验证表单数据,并保存到数据库。 - 处理表单验证错误,并渲染
change.html模板,显示错误信息。
HTML 模板 change.html 示例:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>{{ title }}</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
{% if errors %}
<div class="alert alert-danger">
{% for field, errorlist in errors.items %}
{% for error in errorlist %}
{{ error|escape }}
{% endfor %}
{% endfor %}
</div>
{% endif %}
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>
</body>
</html>
运行步骤:
- 创建 Django 项目和应用。
- 在应用的
models.py文件中创建Admin模型,定义管理员信息。 - 在应用的
forms.py文件中添加上述AdminModelForm代码。 - 在应用的
views.py文件中添加上述admin_add代码。 - 创建
change.html模板文件,并添加相应内容。 - 在
urls.py文件中添加路由配置,将 URL 映射到admin_add函数。 - 运行 Django 项目,访问管理员添加页面,测试功能。
注意:
- 确保已配置 Django 的用户认证系统,并已创建管理员用户。
- 在实际项目中,需要根据具体需求修改代码,例如添加更多字段、验证逻辑等。
- 建议使用 Bootstrap 等 CSS 框架,为表单添加样式,使其更美观。
通过上述代码示例,您可以轻松实现 Django 管理员添加功能,并确保密码安全和表单验证的正确性。
原文地址: https://www.cveoy.top/t/topic/ocbr 著作权归作者所有。请勿转载和采集!