首页 > 其他分享 >drf-序列化和反序列化

drf-序列化和反序列化

时间:2022-10-18 14:48:28浏览次数:57  
标签:00 models date 序列化 data serializer drf

https://www.bilibili.com/video/BV1z5411D7BQ?p=8&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea

 

models.py

from django.db import models

# Create your models here.
class Book(models.Model):
    title=models.CharField(max_length=55,verbose_name="书籍名称")
    price=models.IntegerField(verbose_name="价格")
    # pub_date=models.DateField(verbose_name="出版日期")
    pub_date = models.CharField(max_length=55,verbose_name="出版日期")

 

views.py

from django.shortcuts import render

# Create your views here.


from rest_framework.views import APIView
from sers.models import  Book
from rest_framework import serializers
from rest_framework.response import Response


# 针对模型设计序列化器 ----查询数据库数据赋值到这个类然后扔出去
# (我把数据转成json给前端发叫序列化)
#(我把前端传过来的json变成数据模型叫反序列化)
class BookSerializers(serializers.Serializer):
    id=serializers.IntegerField(read_only=True)#在客户端提交数据【反序列化阶段不会要求有id字段】 可以不传
    title = serializers.CharField(max_length=8)
    price = serializers.IntegerField()
    # 左边date是给出去的字段,右边soure是具体数据模型对应取值的字段
    date = serializers.CharField(source="pub_date")

    # 接口输出例子
    # [
    #     {
    #         "id": 1,
    #         "title": "aabook",
    #         "price": 199,
    #         "date": "2020-12-12 00:00:00"
    #     }]


class BookView(APIView):
    def get(self,request):
        # 获取所有书籍
        book_list=Book.objects.all()
        #这步其实就是把把查出来的数据赋值到序列化模型里---单条数据不需要many属性
        serializer = BookSerializers(instance=book_list, many=True)
        # # # # 调用序列化对象的data获取序列化后的数据
        data = serializer.data
        return Response(data)


    def post(self,request):
        # 获取请求的数据 #request.data可以拿到表单或json的数据
        print("data",request.data)
        # 构建序列化器
        serializer = BookSerializers(data=request.data)
        # # 校验数据--返回boolen值,成功信息放到serializer.validated_data,错误信息放到serializer.errors
        if serializer.is_valid():
            # 数据插入到数据库中
            # 直接数据模型可插入
            Book.objects.create(**serializer.validated_data)
            #这种写法也可以插入数据
            # Book.objects.create(title="111")
            #数据校验通过
            return Response(f'校验成功信息:{serializer.validated_data}') #serializer.validated_data是反序列化成数据模型了
            # return Response(f'校验成功信息:{serializer.data}') #"校验成功信息:{'title': 'j11', 'price': 1999, 'date': '2020-12-12 00:00:00'}"
        else:
            # 数据校验失败
            return Response(f'校验失败信息:{serializer.errors}')
        
        
     #前端提交的参数
    {
    "title": "book1",
    "price": 19,
    "date":"2020-12-12 00:00:00"
}

 

标签:00,models,date,序列化,data,serializer,drf
From: https://www.cnblogs.com/kaibindirver/p/16802477.html

相关文章

  • test34-文件输入输出序列化和反序列化 msgpack map用法
    #!/usr/bin/envpython#-*-encoding:utf-8-*-'''importcsvheaders=['学号','姓名','分数']rows=[('202001','张三','98'),('202002','李四','95'),('202003&......
  • drf--ViewSet
    ViewSet实现cbv模式指定请求对应函数,函数里面可以放get的多个方法等urls.pyfromdjango.urlsimportpath,re_pathurlpatterns=[#^:匹配字符串开头,#$:匹配......
  • 44.drf缓存
    DRF原有缓存Django缓存、配置:https://www.cnblogs.com/Mickey-7/p/15792083.html Django为基于类的视图提供了一个method_decorator装饰器,用于为类视图添加缓存类别......
  • gson序列化null
    问题:当一个字段为null时,json数据不显示字段名称Mapm=NewHashMap();m.put(“a”,null);输出:newGson().toJson(m);预期结果:{a:null}实际结果:{}解决方式:使用GsonBui......
  • 源码分析之序列化器的many关键字
    在序列多个数据时,我们需要指定一个关键字many=True这是为什么呢?其实是,当序列化器产生对象时,传入参数many和不传入会生成两个不同的对象!!这是怎么实现的呢??1.类的对象生......
  • DRF入门
    目录Django请求生命周期流程图下载安装restful规范序列化和反序列化drf快速使用CBV源码流程分析DRF之APIView和Request对象分析DjangoView和DRFAPIView的小插曲APIView的......
  • 序列化
    序列化api接口开发,最核心最常见的一个代码编写过程就是序列化,所谓序列化就是把数据转换格式,常见的序列化方式:json、pickle、base64、struct...序列化可以分为俩个阶段:""......
  • 序列化组件
    序列化组件的三大功能序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器......
  • restframework序列化的应用
    序列化器有两个功能数据校验序列化1.序列化器的简单实用序列化器将django通过orm操作从数据库中取得的数据做序列化操作转换为Json数据需要编写序列化类fromapii......
  • HMdubbo6【dubbo高级:序列化】
    1理论消费者A和消费者B分别部署在两台机器上一般将User类定义为独立模块,A模块和B模块都通过maven依赖于该模块即可dubbo内部已经将序列化和反序列化的过程内部封......