第十单元 序列化器

序列化器代码:

# 序列化器
from rest_framework import serializers
from myapp.models import People

# 普通序列化器
class PeopleSerializer(serializers.Serializer):
    # id = serializers.IntegerField()
    name = serializers.CharField(max_length=20)
    sex = serializers.CharField(max_length=20)
    money = serializers.IntegerField()
    ranking = serializers.IntegerField()

    # 新增数据会调用create方法
    def create(self, validated_data):
       res = People.objects.create(
            **validated_data
        )
       return res
    # 修改数据需要数显update方法
    def update(self, instance, validated_data):
        instance.name = validated_data.get('name')
        instance.sex = validated_data.get('sex')
        instance.money = validated_data.get('money')
        instance.ranking = validated_data.get('ranking')
        instance.save()
        return instance


# 模型序列化器
class PeopleSerializer2(serializers.ModelSerializer):
    class Meta:
        # 指定模型类
        model = People
        # 指定映射字段
        fields = '__all__' # 指明所有模型类字段
        # exclude = ('createtime',) # 排除掉的字段
        # read_only_fields = ('title','description') # 只用于序列化的字段
        # fields = ('title','description','inventory') # 手动指明字段
        # extra_kwargs = {
        #     'price':{'min_value':0, 'required':True},
        # } # 修改原有字段的选项参数

类试图代码:

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from myapp.models import People
from myapp.serializers import PeopleSerializer,PeopleSerializer2
# Create your views here.
class MyView(APIView):
    def get(self,request):
        print(request.query_params)
        return Response({'msg':'success'},status=200)
    def post(self,request):
        print(request.data)
        return Response({'msg':'success'},status=201)

class PeopleView(APIView):
    # 查询所有信息
    # def get(self,request):
    #     people = People.objects.all()
    #     peoples_list = []  # 手动序列化
    #     for i in people:
    #         people_dict = {
    #             "name":i.name,
    #             "sex":i.sex,
    #             "money":i.money,
    #             "ranking":i.ranking,
    #         }
    #         peoples_list.append(people_dict)
    #     return Response(peoples_list,status=200)

    def get(self,request):
        people = People.objects.all()
        # people是要序列化的数据,many=True多个数据
        ser = PeopleSerializer2(people,many=True)
        return Response(ser.data,status=200)
    # 增加一个人物信息,反序列化,json=>orm格式数据
    def post(self,request):
        # 使用序列化器进行反序列化
        ser = PeopleSerializer2(data=request.data)
        # 判断反序列化是否成功
        # ser.is_valid判断是否合法
        # raise_exception=True如果出现异常会抛出异常
        if ser.is_valid(raise_exception=True):
            # 反序列化成功就保存
            # 保存会调用普通序列化器内的create、update
            ser.save()
            # 201添加或修改成功
            return Response({"msg":"添加数据成功"},status=201)
        return Response({"msg":"添加数据失败"})

class PeopleView2(APIView):
    def get(self, request, id):
        try:
            peo_data = People.objects.get(id=id)
        except Exception as e:
            print(e)
            # 404数据不存在
            return Response({'msg':'查询失败'},status=404)
        # 对ORM操作查询到的数据进行序列化
        ser = PeopleSerializer2(peo_data)
        return Response(ser.data,status=200)

    def put(self,request,id):
        try:
            peo_data = People.objects.get(id=id)
        except Exception as e:
            print(e)
            # 404数据不存在
            return Response({'msg':'查询失败'},status=404)
        # 对要更新的数据进行 反序列化
        # initial=peo_data 要修改的ORM对象(实例)
        # data=request.data 是html页面提交的数据用于修改
        ser = PeopleSerializer2(instance=peo_data,data=request.data)
        # 判断反序列化是否成功
        if ser.is_valid(raise_exception=True):
            ser.save()
            return Response({"msg": "修改数据成功"}, status=201)
        return Response({"msg": "修改数据失败"})




    def delete(self,request,id):
        try:
            People.objects.get(id=id).delete()
        except Exception as e:
            print(e)
            return Response({'msg': '删除失败'}, status=404)
        # 204删除成功
        return Response({'msg': '删除成功'}, status=204)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值