zoukankan      html  css  js  c++  java
  • Django REST Framework 序列化和校验 知识点

    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)

        

  • 相关阅读:
    SpringMvc
    Spring-Aop
    Spring-IOC
    Spring模块划分
    队列
    稀疏数组
    数据结构
    Nginx配置实例
    Nginx常用命令
    视频断点播放:h5+jquery
  • 原文地址:https://www.cnblogs.com/konghui/p/10267390.html
Copyright © 2011-2022 走看看