DRF序列化
Django ORM对象 --> JSON格式的数据 序列化
JSON格式的数据 --> Django ORM数据 反序列化
需要两个工具:
from rest_framework.serializers import Serializer from rest_framework.serializers import MoselSerializer
类比Django中的form组件
Django form --> HTML表单
HTML表单 --> ORM数据
用法:
many=True参数
实例化 序列化器对象的时候, 添加many=True参数, 能实现序列化多个对象
正向序列化用 read_only = True
反向序列化用 write_ony = True
source
category = serializers.CharField(source="get_category_display" read_only=True) # Obj --> JSON # Obj.title --> "书名" # Obj.get_category_display() --> "Python"
ModelSerializer
和model一对一绑定的序列化类
serializerMethodField字段
校验
校验的规则3中方法
1. 局部的校验方法
# 在serializer类中定义局部校验规则 # validate 加 字段名 def validate_title(self, value): # value就是需要检验的这个字段的值 """类似于Form组件的局部钩子""" if '红烧牛肉' in value: raise serializers.ValidationError('你是魔鬼吗?') else: return value
2. 全局的校验方法
def validate(self, attrs): pass
3. 自定义的校验函数
# 类似于Form组建中的自定义校验规则 title = serializers.CharField(max_length=32, validators=[my_heiheihei, ]) def my_heiheihei(value) pass
校验规则由序列化对象的 is_valid 触发
def post(self, request): # 1. 获取前端提交的数据 # 1.1 APIView # self.request是谁? 不是Django原来的哪个request self._request才是原来的request print(request.data) # APIView 包装的数据 # 2. 对数据做有效性校验 ser_obj = BookModelSerializer(data=request.data) if ser_obj.is_valid(): ser_obj.save() # 调用的是BookSerializer类中的create方法,需要自己去实现 # 3. 拿到序列化的数据去数据库创建新记录 return Response("ok") else: # 返回校验失败的错误提示信息 return Response(ser_obj.errors)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django REST Framework 序列化和校验 知识点 - Python技术站