欢迎访问宙启技术站
智能推送

Django核心验证器对模型字段的约束规则详解

发布时间:2023-12-19 04:52:12

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核心验证器的常见用法和示例。通过使用这些验证器,我们可以方便地对模型字段进行约束,确保数据的合法性并提高系统的稳定性和安全性。