zoukankan      html  css  js  c++  java
  • Django REST framework框架

    序列化器

    功能:进行数据的序列化和反序列化.

    序列化功能:将对象转换为字典。
    反序列化功能:数据校验-----数据保存-新增和更新

    • 安装DRF框架
    pip install djangorestframework
    
    • 添加rest_framework应用, 将rest_framework在INSTALLED_APPS中进行注册
    INSTALLED_APPS = [
        ...
        'rest_framework',
    ]
    

    序列化器类定义

    使用中更多使用serializers.ModelSerializer

    from rest_framework import serializers
    
    class <序列化器类>(serializers.Serializer):
    	# 字段 = serializers.字段类型(选项参数)
    


    举例:

    class Goods(object):
    	def __init__(self, name, price):
    		self.name = btitle
    		self.price = price
        
    # 问题:
    # 1. 定义序列化器类GoodsSerializer,将goods对象进行序列化:{"name": "苹果", "price": 20.0}
    class GoodsSerializer(serializers.Serializer):
      name = serializers.CharField()
      price = serializers.DecimalField()
    
    # 2. 如果传递了req_data = {"name": "桃子", "price": 10.5},反序列化校验能否通过?
    
    if __name__ == "__main__":
      	req_data = {"name": "桃子", "price": 10.5}
        # 创建序列化器对象
        serializer = GoodsSerializer(data=req_data)
        # 校验:参数完整性,数据类型
        serializer.is_valid()
        # 错误提示
        serializer.errors
        # 校验之后的数据
        serializer.validated_data
        
    if __name__ == "__main__":
      	# 创建Goods实例对象
        goods = Goods('苹果', 20.0)
        
        # 创建序列化器对象
        serializer = GoodsSerializer(goods)
        serializer.data
    

    选项参数

    2. 新增一本图书数据
    API: POST /books/
    参数:
    	json
    	{
    		"btitle": "书名",
    		"bpub_date": "出版日期"
    	}
    响应:	
    	status=201
    	json
    	{
    		"id": "图书id",
    		"btitle": "书名",
    		"bpub_date": "出版日期",
    		"bread": "阅读量",
    		"bcomment": "评论量"
    	}
    	
    class BookInfoSerializer(serializers.Serializer):
    	id = serializers.IntegerField(read_only=True)
    	btitle = serializers.CharField()
      bpub_date = serializers.DateTimeField()
    
      bread = serializers.IntegerField(read_only=True)
      bcomment = serializers.InterField(read_only=True)
      
      
    req_data = {"btitle": "图书", "bpub_date": "2010-01-01"}
    serializer = BookInfoSerializer(data=req_data)
    serializer.is_valid()
    

    2. 新增一本图书数据
    API: POST /books/
    参数:
    	json
    	{
    		"btitle": "书名", # 必传
    		"bpub_date": "出版日期", # 必传
    		"bread": "阅读量", # 可以不传
    		"bcomment": "评论量" # 可以不传
    	}
    响应:	
    	status=201
    	json
    	{
    		"id": "图书id",
    		"btitle": "书名",
    		"bpub_date": "出版日期",
    		"bread": "阅读量",
    		"bcomment": "评论量"
    	}
    	
    class BookInfoSerializer(serializers.Serializer):
    	id = serializers.IntegerField(read_only=True)
    	btitle = serializers.CharField()
      bpub_date = serializers.DateTimeField()
      bread = serializers.IntegerField(required=False)
      bcomment = serializers.InterField(required=False)
    

    4)default:设置反序列化和序列化时使用的默认值

  • 相关阅读:
    深度学习--文本摘要生成简介
    hive进阶 技巧
    python 库 imgaug数据增强
    评分卡模型
    spark-submit 参数总结
    H2O中的随机森林算法介绍及其项目实战(python实现)
    kafka 基本原理简介
    Xshell 服务器配置
    yapi内网部署 centos
    pm2使用 node 进程管理
  • 原文地址:https://www.cnblogs.com/oklizz/p/11285817.html
Copyright © 2011-2022 走看看