ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-08-31 13:04:20  阅读:164  来源: 互联网

标签: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
来源: https://www.cnblogs.com/fuck-Innovative-training/p/16640186.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有