📜  标签 – Django 表单字段验证(1)

📅  最后修改于: 2023-12-03 15:10:48.273000             🧑  作者: Mango

Django 表单字段验证

Django 表单是 Web 编程中重要的一部分。而表单字段验证则是保证表单数据的正确性和安全性的关键。Django 提供了许多内置的验证器,同时也支持自定义的验证规则。在本文中,我们会详细介绍 Django 中的表单字段验证。

内置验证器

Django 表单提供了许多内置的验证器,包括以下内容:

  • 必填字段验证:required
  • 最大值/最小值验证:MaxValueValidatorMinValueValidator
  • 最大长度/最小长度验证:MaxLengthValidatorMinLengthValidator
  • 正则表达式验证:RegexValidator
  • 数字验证:DecimalValidatorEmailValidatorURLValidator

Django 的内置验证器都实现了一个名为 Validator 的基类,开发者也可以自定义自己的验证器。

使用内置验证器

对于内置验证器,我们可以直接在表单字段中使用。例如,下面的代码示例展示了如何使用内置的最大值验证器:

from django import forms
from django.core.validators import MaxValueValidator

class AgeForm(forms.Form):
    age = forms.IntegerField(validators=[MaxValueValidator(120)])

上述代码中,我们在 IntegerField 字段参数列表中添加了一个 MaxValueValidator 验证器,用于限制 age 字段的最大值为 120

自定义验证器

对于 Django 中没有提供的验证规则,我们可以通过自定义验证器来实现。自定义验证器需要实现 Validator 基类的 __init____call__ 方法,__init__ 方法用于初始化验证器,__call__ 方法则是实际的验证逻辑。

from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
from django.core.validators import RegexValidator

class PhoneValidator(RegexValidator):
    regex = r'^\d{11}$'
    message = _('请输入 11 位有效手机号码。')
    code = 'invalid_phone_number'

上述代码定义了一个 PhoneValidator 验证器,用于验证手机号码是否为 11 位数字。我们继承了 RegexValidator,覆写了其中的正则表达式、错误信息和错误代码,实现了自定义的验证逻辑。

接下来,我们可以在表单字段中使用该验证器:

class PhoneForm(forms.Form):
    phone = forms.CharField(validators=[PhoneValidator()])

上述代码会在 phone 字段验证过程中使用我们自定义的 PhoneValidator 验证器。

预处理数据

在 Django 中,表单验证器通常是在 cleaned_data 属性中完成验证,并返回一个清理过的数据字典。预处理数据可以保证表单数据的正确性和安全性。

class LoginForm(forms.Form):
    username = forms.CharField(max_length=100)
    password = forms.CharField(widget=forms.PasswordInput())

    def clean_username(self):
        username = self.cleaned_data.get('username')
        if username.isalpha():
            return username
        else:
            raise forms.ValidationError(_('用户名只能包含字母。'))

上述代码中,我们覆写了 clean_username 方法,实现了自定义的 username 字段验证逻辑。如果验证通过,cleaned_data 属性中会包含经过预处理的数据字典。

结论

Django 表单字段验证是实现 Web 应用程序安全和正确性的重要组成部分。在本文中,我们介绍了 Django 中内置的验证器、自定义验证器、预处理数据等相关内容。通过学习本文,您可以更高效地使用 Django 表单,并实现更安全可靠的 Web 应用程序。