一:HyperlinkedIdentityField(用的很少):传三个参数:第一个路由名字,用来反向解析,第二个参数是要反向解析的参数值,第三个参数:有名分组的名字
-1 publish = serializers.HyperlinkedIdentityField(view_name='ttt',lookup_field='publish_id',lookup_url_kwarg='pky') -2 view_name:路由的别名,lookup_field:根据表的哪个字段,来拼路径,lookup_url_kwarg:反向解析有名分组的名字 -3 写路由:url(r'^publish/(?P<pky>d+)', views.Publish.as_view(),name='ttt'), -4 实例化序列化类的时候,需要把request对象传过去 book_ser=BookSerializer(ret,many=True,context={'request': request})
xx=HyperlinkedIdentityField(view_name='路由名字',look_up_field='publish_id',lookup_url_kwarg='pky')
xx=http://127.0.0.1:8001/publish/1
二:序列化组件的数据校验
1、类比forms组件
2、字段是否必填,通过required,来控制 authors=serializers.CharField(required=False)
3、数据校验,生成一个序列化类的对象
对象.is_valid()
4、新增数据:
对象.save()
5、修改数据:
在生成对象的时候,需要传instanse=查询出来的对象
对象.save()
生成序列化类对象的时候,把要校验的数据(字典:前端传过来的)传过来 ser=BookSerializer(data=request.data) ser.is_valid() 显示中文:error_messages={'required': '该字段必填'}
三:序列化组件数据校验功能的钩子函数
1、局部钩子函数(value就是这个字段的值)
def validate_字段名(self, value): #拿到值,就可以进行判断了 #如果通过,把value值返回, #如果不通过,抛 ValidationError 异常
2、全局钩子函数(value是验证通过的所有数据)
def validate(self, value): #取出数据,进行判断 #如果通过,把value值返回, #如果不通过,抛 ValidationError 异常
四:序列化组件的反序列化和保存
1、保存
ser=BookSerializer(data=request.data)
ser.save()---->向数据库中插一条数据
2、更新
ser=BookSerializer(data=request.data.instance='要更新的对象') ser.save()---->向数据库中插一条数据