首页 > 其他分享 >序列化器:反序列换-添加和更新数据操作

序列化器:反序列换-添加和更新数据操作

时间:2022-08-31 13:04:22浏览次数:57  
标签:validated instance 添加 序列 import 序列化 data serializer

前端传到后端需要反序列化,后端传到前端需要序列化

正常需要serializer两次:

from django.views import View
from .models import Student
from .serializers import StudentSerializer
from django.http.response import JsonResponse
import json


class StudentView(View):
    def get(self,request):
        #反序列化,验证完成之后添加数据入库
        #1.获取数据
        #data=json.dumps(request.body)
        #模拟来自客户端的数据
        data={
            "name":"sada",
            "age":12,
            "sex":True,
            "classmate":"900",
            "description":"sadasda",
        }
        #2.实例化序列化器,得到序列化对象
        serializer=StudentSerializer(data=data)#前端传给后端要反序列化
        #3.调用序列化器进行数据验证
        serializer.is_valid(raise_exception=True)#验证失败抛出异常
        #4.获取验证后的结果
        data=serializer.validated_data
        #5.操作数据库
        student=Student.objects.create(**data)
        serializer=StudentSerializer(instance=student)#后端传给前端要序列化
        #6.返回结果
        return JsonResponse(serializer.data,status=201)

调用create():

 

from django.views import View
from .models import Student
from .serializers import StudentSerializer
from django.http.response import JsonResponse
import json


class StudentView(View):
    def get(self,request):
        #反序列化,验证完成之后添加数据入库
        #1.获取数据
        #data=json.dumps(request.body)
        #模拟来自客户端的数据
        data={
            "name":"sadass",
            "age":12,
            "sex":True,
            "classmate":"900",
            "description":"sadasda",
        }
        #2.实例化序列化器,得到序列化对象
        serializer=StudentSerializer(data=data)#前端传给后端要反序列化
        #3.调用序列化器进行数据验证
        serializer.is_valid(raise_exception=True)#验证失败抛出异常
        #4.获取验证后的结果,操作数据库
        serializer.save()#会根据实例化序列化器的时候是否传入instance来自动调用create或update方法
        #5.返回结果
        return JsonResponse(serializer.data,status=201)#save自动补充了intance,data里面就会有id
    def create(self,validated_data):#添加数据操作,自动实现从字典变成模型对象
        student=Student.objects.create(**validated_data)
        return student

调用update():

from django.views import View
from .models import Student
from .serializers import StudentSerializer
from django.http.response import JsonResponse
import json


class StudentView(View):
    def get(self,request):
        #反序列化,验证数据后更新入库
        #1.根据访问的url地址获取pk
        pk=5
        try:
            student=Student.objects.get(pk=pk)
        except Student.DoseNotExist:
            return JsonResponse({"errors":"当前学生不存在"},status=404)

        #2.接收客户端提交的修改数据
        #模拟来自客户端的数据
        data={
            "name":"sadas萨顶顶s",
            "age":12,
            "sex":True,
            "classmate":"900",
            "description":"sadasda",
        }
        #3.实例化序列化对象
        serializer=StudentSerializer(instance=student,data=data)#更新需要传两个参数
        #4.验证数据
        serializer.is_valid(raise_exception=True)
        #5.入库
        serializer.save()
        #6.返回结果
        return JsonResponse(serializer.data,status=201)
    def update(self,instance,validated_data):
        instance.name=validated_data["name"]
        instance.sex=validated_data["sex"]
        instance.age=validated_data["age"]
        instance.description=validated_data["description"]
        instance.classmate=validated_data["classmate"]
        instance.save()#调用模型对象的save,和serializer.save不是一个方法
        return instance

 

标签:validated,instance,添加,序列,import,序列化,data,serializer
From: https://www.cnblogs.com/fuck-Innovative-training/p/16640186.html

相关文章

  • TimescaleDB时间序列数据库
    TimescaleDB:这是一款支持完整sql开源的时间序列数据库。用处1、数据量庞大2、只做时间索引类的插入3、很少更新数据TimescaleDB的好处:基于时序优化自动分片(自动......
  • [网鼎杯 2020 朱雀组]phpweb-1|反序列化
    1、打开界面之后界面一直在刷新,检查源代码也未发现提示信息,但是在检查中发现了两个隐藏的属性:func和p,抓包进行查看一下,结果如下:2、对两个参数与返回值进行分析,我们使用d......
  • 序列与反序列
    特殊的对象想要存储时,就需要使用序列1importpickle23info={4'':'',5'age':32,6'func':'xxx'7}89m=1001011print(pickle.d......
  • civil3d安装教程2022序列号和密钥
     Civil3D2021WIN1064位安装步骤:1.先使用“百度网盘客户端”下载C3D21_CN_x64软件安装包到电脑磁盘里,并右击进行解压,安装前先断网,然后找到Autodesk_Civil_3D_2021_Chin......
  • ARIMA时间序列模型,确定合适的 p 和 q 值
    图3自相关图、偏相关图通过观察图3中的acf图和pacf图,可以得到:自相关图显示滞后有三个阶超出了置信边界(第一条线代表起始点,不在滞后范围内);偏相关图显示在滞后1......
  • 序列化器:反序列换-字段选项 validate validate_<字段> validator
    1.使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。2.在获取反序列化的数据前,必须调用is_valid()方法进行验证,验证成功返回Tr......
  • Android 添加shape, selector等资源文件
    右键点击drawable文件夹,选择new->DrawableResourcefile  在弹出的NewResourcefile界面中,将Rootelement定义为shape,就可以添加一个shape文件;将Rootelement定义......
  • 序列化器:序列化一个模型对象和多个模型对象
    1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型......
  • QT——状态栏添加label
    QLabel*state_msg=newQLabel(this);state_msg->setMinimumSize(state_msg->sizeHint());//设置label属性state_msg->setAlignment(Qt::AlignHCenter);//设......
  • 序列化与反序列化
    1.参与序列化的对象必须实现Serializable接口,起到相应的标识作用,Java虚拟机会给该类自动生成一个序列化版本号2.java通过类名+序列化版本号的方式进行区分,transient关......