📅  最后修改于: 2023-12-03 15:14:44.681000             🧑  作者: Mango
Django 验证器是用于对用户输入进行验证的一种工具。它可以在模型定义中直接使用,也可以在表单中使用。Django 内置了一些常见的验证器,如验证是否为空、是否为数字等等。同时,我们也可以自定义验证器来满足特殊的需求。
要使用 Django 验证器,我们需要先导入它们。在模型定义中,我们可以在字段定义的参数列表中直接使用验证器。例如,检查一个 CharField 是否必填:
from django.db import models
from django.core.validators import MinLengthValidator
class MyModel(models.Model):
name = models.CharField(max_length=100, validators=[MinLengthValidator(2)])
在表单中,我们可以使用 Django 的 clean()
方法来对表单数据进行验证。例如,验证一个表单字段是否为数字:
from django import forms
from django.core.validators import MinValueValidator, MaxValueValidator
class MyForm(forms.Form):
age = forms.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)])
def clean_age(self):
age = self.cleaned_data.get('age')
if age and age % 2 != 0:
raise forms.ValidationError('年龄必须为偶数。')
return age
以下是 Django 内置的常见验证器:
django.core.validators.EmailValidator
: 验证邮箱格式。django.core.validators.URLValidator
: 验证 URL 格式。django.core.validators.RegexValidator
: 正则表达式验证。django.core.validators.MinValueValidator
: 验证最小值。django.core.validators.MaxValueValidator
: 验证最大值。django.core.validators.MinLengthValidator
: 验证最小长度。我们也可以通过继承 django.core.validators.BaseValidator
来定义自己的验证器。例如,我们可以定义一个验证用户名是否唯一的验证器:
from django.core.validators import BaseValidator
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User
class UniqueUsernameValidator(BaseValidator):
message = '用户名已存在。'
def __call__(self, value):
if User.objects.filter(username=value).exists():
raise ValidationError(self.message, code=self.code)
然后就可以在模型定义中使用:
from django.db import models
from .validators import UniqueUsernameValidator
class MyModel(models.Model):
name = models.CharField(max_length=100, validators=[UniqueUsernameValidator])
Django 的验证器是非常实用的工具,可以帮助我们快速进行表单数据的验证。同时,我们也可以定制自己的验证器来满足特殊的需求。在实际项目中,应该根据具体情况选择合适的验证器来保证数据的正确性。