📅  最后修改于: 2023-12-03 15:14:44.536000             🧑  作者: Mango
Django 是一个基于 Python 的 Web 框架,表单是 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 的模型中使用。我们只需要在模型类中添加 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
方法即可。通过使用自定义验证器,我们可以在一些特殊情况下灵活地进行数据校验,从而保证应用的数据安全和数据一致性。