Django核心验证器对模型字段的约束规则详解
Django是一个基于Python的Web开发框架,它提供了一系列核心验证器来对模型字段进行约束,确保数据的合法性。本文将详细介绍Django核心验证器的常见用法,并给出相应的使用例子。
1. 字段类型验证器(Field Type Validators):
- null:指定字段是否可以为空。
class MyModel(models.Model):
my_field = models.CharField(max_length=100, null=True)
- blank:指定字段在表单中是否可以为空。
class MyModel(models.Model):
my_field = models.CharField(max_length=100, blank=True)
- choices:指定字段的可选值范围。
class MyModel(models.Model):
GENDER_CHOICES = [
('M', 'Male'),
('F', 'Female')
]
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
2. 字符串验证器(String Validators):
- max_length:指定字段的最大长度。
class MyModel(models.Model):
my_field = models.CharField(max_length=100)
- min_length:指定字段的最小长度。
class MyModel(models.Model):
my_field = models.CharField(max_length=100, min_length=10)
- regex:指定字段的匹配正则表达式。
class MyModel(models.Model):
my_field = models.CharField(max_length=100, regex=r'^\d{3}-\d{4}$')
3. 数字验证器(Numeric Validators):
- max_value:指定字段的最大值。
class MyModel(models.Model):
my_field = models.IntegerField(max_value=100)
- min_value:指定字段的最小值。
class MyModel(models.Model):
my_field = models.IntegerField(min_value=0)
- validators:指定字段的定制验证函数。
def validate_even(value):
if value % 2 != 0:
raise ValidationError('The number must be even.')
class MyModel(models.Model):
my_field = models.IntegerField(validators=[validate_even])
4. 日期验证器(Date Validators):
- auto_now:指定字段在每次保存时自动设置为当前日期。
class MyModel(models.Model):
date_created = models.DateField(auto_now=True)
- auto_now_add:指定字段在创建时自动设置为当前日期。
class MyModel(models.Model):
date_created = models.DateField(auto_now_add=True)
- validators:指定字段的定制日期验证函数。
from datetime import date
def validate_future_date(value):
if value > date.today():
raise ValidationError('The date must be in the past.')
class MyModel(models.Model):
my_field = models.DateField(validators=[validate_future_date])
5. 文件验证器(File Validators):
- max_length:指定文件的最大大小。
class MyModel(models.Model):
my_file = models.FileField(max_length=10)
- allowed_extensions:指定文件的允许扩展名。
class MyModel(models.Model):
my_file = models.FileField(allowed_extensions=['txt', 'pdf'])
- validators:指定文件的定制验证函数。
def validate_image(file):
if not file.name.endswith('.jpg'):
raise ValidationError('The file must be a JPEG image.')
class MyModel(models.Model):
my_file = models.FileField(validators=[validate_image])
以上是Django核心验证器的常见用法和示例。通过使用这些验证器,我们可以方便地对模型字段进行约束,确保数据的合法性并提高系统的稳定性和安全性。
