📜  django 验证器导入 (1)

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

Django 验证器导入

简介

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 的验证器是非常实用的工具,可以帮助我们快速进行表单数据的验证。同时,我们也可以定制自己的验证器来满足特殊的需求。在实际项目中,应该根据具体情况选择合适的验证器来保证数据的正确性。