zoukankan      html  css  js  c++  java
  • 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 在类中写要序列化的字段

    如name = serializers.CharField()

    在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',]  除什么字段之外

      depth=1  depth表示深度

      重写属性

     def validate_name(self,value):

    if value.startswith('sb'):
    #不能让你过
    raise ValidationError('书名不能以sb开头')
    else:
    return value

    #全局钩子函数,对全局字段进行校验
    # def validate(self,a):
    # # print(a)
    # name=a.get('name')
    # price=a.get('price')
    # if name != price:
    # raise ValidationError('错了')
    # else:
    # return a

    校验数据在序列化类中校验

    序列化单条数据

    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/

  • 相关阅读:
    批量转外部样式为行内样式
    AngularJS 笔记2
    windows特殊文件或文件夹
    zepto 入门
    js闭包
    AngularJS 笔记1
    sublime配置 sublimecondeintel 分号后不要提示
    sublime插件开发手记
    用flvplayer.swf在网页中播放视频(网页中flash视频播放的实现)
    无插件启动谷歌浏览器
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10600451.html
Copyright © 2011-2022 走看看