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

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

作者:互联网

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

正常需要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