Django-DRF | 验证器
- 2020 年 2 月 20 日
- 筆記
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
多数时候,在 REST 框架中处理验证时,只需要依赖默认的字段验证,或者在序列化程序和字段类上编写显式验证方法。
在开发 REST API 接口时,在视图中需要做的最核心的事:
- 将数据库数据序列化作为前端所需要的格式,并返回。
- 将前端发送的数据反序列化作为模型类对象,并保存到数据库中。
每个视图具体操作的数据不同,但增、删、改、查的实现流程都可以复用简化编写:
- 增:校验请求数据 —> 执行反序列化过程 —> 保存数据库 —> 将保存的对象序列化并返回
- 删:判断要删除的数据是否存在 —> 执行数据库删除
- 改:判断要修改的数据是否存在 —> 校验请求的数据 —> 执行反序列化过程 —> 保存数据库 —> 将保存的对象序列化并返回
- 查:查询数据库 —> 将数据序列化并返回
REST 框架的验证
Django REST 框架序列化器中的验证处理方式:ModelForm
ModelForm 验证部分在表单上执行,部分在模型实例上执行。使用 REST 框架,验证完全在序列化程序类上执行。
class CustomerReportRecord(models.Model): reference = models.CharField(unique=True, max_length=20) description = models.TextField() create_at = models.DateTimeField(default=timezone.now, editable=False)
class CustomerReportSerializer(serializers.ModelSerializer): class Meta: model = CustomerReportRecord
命令行执行 python manage.py shell
>>> from serializers import CustomerReportSerializer >>> serializer = CustomerReportSerializer() >>> print(repr(serializer)) CustomerReportSerializer(): id = IntegerField(label='ID', read_only=True) create_at = DateTimeField(read_only=True) reference = CharField(max_length=20, validators=[<UniqueValidator(queryset=CustomerReportRecord.objects.all())>]) description = CharField(style={'type': 'textarea'})