📜  Django 表单中的自定义字段验证(1)

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

Django 表单中的自定义字段验证

Django 是一个基于 Python 的 Web 框架,表单是 Django 中常用的组件。Django 自带的表单验证器已经涵盖了大部分情况,但在一些特殊情况下,可能需要自己写一些自定义验证规则。

在 Django 表单中添加自定义验证器

Django 的验证器通过在字段定义中添加 validators 参数来使用,我们可以通过写一个函数来自定义一个验证器:

from django import forms
from django.core.exceptions import ValidationError

def validate_phone_number(value):
    if not value.isdigit():
        raise ValidationError("手机号应该只包含数字")
    if len(value) != 11:
        raise ValidationError("手机号应该为 11 位")

class MyForm(forms.Form):
    phone_number = forms.CharField(validators=[validate_phone_number])

在上面的例子中,我们定义了一个 validate_phone_number 的函数来自定义验证规则,然后在 MyForm 中的 phone_number 字段中使用该验证器。当该字段接收到数据后,如果在验证过程中出现了错误,Django 将会抛出异常。

在 Django 模型中添加自定义验证器

自定义验证器同样可以在 Django 的模型中使用。我们只需要在模型类中添加 clean 方法,然后在这个方法里面添加我们的自定义验证规则:

from django.db import models
from django.core.exceptions import ValidationError

class Person(models.Model):
    name = models.CharField(max_length=20)
    phone_number = models.CharField(max_length=11)

    def clean(self):
        if not self.phone_number.isdigit():
            raise ValidationError("手机号应该只包含数字")
        if len(self.phone_number) != 11:
            raise ValidationError("手机号应该为 11 位")

在上面的例子中,我们重写了 Person 模型类中的 clean 方法,在这个方法中添加了我们的自定义验证规则。当我们调用 save 方法提交数据时,如果在验证过程中出现了错误,Django 将会抛出异常。

总结

在 Django 表单和模型中添加自定义验证器是非常简单的,只需要定义一个函数或者重载 clean 方法即可。通过使用自定义验证器,我们可以在一些特殊情况下灵活地进行数据校验,从而保证应用的数据安全和数据一致性。