锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

第十单元 序列化器

时间:2022-10-17 11:30:01 数显温度变送器mx

序列化器代码:

# 序列化器 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)

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章