其他分享
首页 > 其他分享> > drf序列化组件

drf序列化组件

作者:互联网

restful规范:前后端分离:前端一个项目,后端一个项目

1:通常使用HTTPS协议

2.域名部署 api.baidu.com     www.baidu.com/api

3.版本    www.baidu.com/api/v2  版本号放在请求头中

4.路径都是名词(可以用复数)

5.根据不同的请求方式,执行不同的操作  delete删除

put和patch操作都是幂等性操作

6.请求地址中携带过滤条件

7.状态码   {'status':100,error:'请勿接地气',data:[]}

8.错误信息

9.响应的数据格式:

  所有数据:列表

  删除数据:返回一个空

10.返回的数据中携带连接

CBV执行流程

路由中配置  类名.as_view()  本质是一个返回的函数地址

当有请求时:内存地址(request,其他参)

内部又调用的dispatch方法,通过反射,根据请求方式,执行不同方法

序列化组件

写一个类继承Serializer 在类中写要序列化的字段

在View.py中使用book=BookSerializer(book_list,many=True)

book.data 就是序列化后的数据

source的三种用法:1指定字段 2:指定方法 3:深度查询(跨表)

SerializerMethodField,必须配合方法使用get_字段名(self,obj)obj是当前序列化的对象

SerializerMethodField对应的方法中还可以继续使用其他的序列化类

3:rest-framework序列化之ModelSerializer

写一个类继承ModelSerializer  在类内部写:

class Meta:

  model = models.Book

  fields='__all__'  所有字段

  exclude=['name',]  除什么字段之外

  重写属性

序列化单条数据

book_ser=BookSerializer(instance=book,many=False)

注意book:不是queryset对象,是book对象

5新增一本书

/books/发送post请求,携带json格式数据

6.反序列化之局部,全局钩子(序列化的类一定是继承ModelSerializer的类)

def validate_name(self,value):

  if value.startswith('sb'):

    raise ValidationError('书名不能以sb开头')

  else:

    return value

全局钩子函数,对全局字段进行校验

def validate(self,a):

  name = a.get('name')

  price=a.get('price')

  if name !=price:

    raise VilidationError('错了)

  else:

    return a

json在线格式化:https//www.json.cn/

 

标签:baidu,ModelSerializer,请求,drf,book,组件,序列化,name
来源: https://www.cnblogs.com/suncunxu/p/10600451.html