首页 > 其他 > 详细

Django REST Framework 序列化和校验 知识点

时间:2019-01-15 22:51:30      阅读:253      评论:0      收藏:0      [点我收藏+]

 

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)

 

 

    

Django REST Framework 序列化和校验 知识点

原文:https://www.cnblogs.com/konghui/p/10267390.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!