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})

代码解析:

  1. AdminModelForm

    • 继承自 forms.ModelForm,用于创建管理员添加表单。
    • 添加了一个 confirm_password 字段,用于确认密码,并使用 forms.PasswordInput 作为输入框,确保密码以隐藏形式输入。
    • Meta 类中定义了模型、字段和输入框配置。
    • 使用 __init__ 方法为所有字段添加 form-control 类名,方便 CSS 样式的应用。
    • clean_confirm_password 方法验证密码的一致性,如果两次输入的密码不一致,则抛出 ValidationError
  2. 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>

运行步骤:

  1. 创建 Django 项目和应用。
  2. 在应用的 models.py 文件中创建 Admin 模型,定义管理员信息。
  3. 在应用的 forms.py 文件中添加上述 AdminModelForm 代码。
  4. 在应用的 views.py 文件中添加上述 admin_add 代码。
  5. 创建 change.html 模板文件,并添加相应内容。
  6. urls.py 文件中添加路由配置,将 URL 映射到 admin_add 函数。
  7. 运行 Django 项目,访问管理员添加页面,测试功能。

注意:

  • 确保已配置 Django 的用户认证系统,并已创建管理员用户。
  • 在实际项目中,需要根据具体需求修改代码,例如添加更多字段、验证逻辑等。
  • 建议使用 Bootstrap 等 CSS 框架,为表单添加样式,使其更美观。

通过上述代码示例,您可以轻松实现 Django 管理员添加功能,并确保密码安全和表单验证的正确性。

Django 管理员添加功能:密码确认、表单验证及错误处理

原文地址: https://www.cveoy.top/t/topic/ocbr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录