zoukankan      html  css  js  c++  java
  • Django day26 HyperlinkedIdentityField,序列化组件的数据校验以及功能的(全局,局部)钩子函数,序列化组件的反序列化和保存

    一: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()---->向数据库中插一条数据
  • 相关阅读:
    二分查找 【数组的二分查找】
    二分答案 [TJOI2007]路标设置
    队测 逆序对 permut
    【线段树】 求和
    状压DP Sgu223 骑士
    状压DP Poj3311 Hie with the Pie
    状压DP入门 传球游戏之最小总代价
    状压DP 小W选书籍
    状压DP [Usaco2008 Nov]mixup2 混乱的奶牛
    __gcd()用法
  • 原文地址:https://www.cnblogs.com/zedong/p/10108265.html
Copyright © 2011-2022 走看看