28.Django_framework_优化新增和修改方法

发现之前的新增和修改代码都会比较多,这次我们进行一下优化;

1.优化的前提,需了解

  • views.py的方法中,创建序列化器对象时,如果只传参data,那么在调用save()方法时,实际上调用的是序列化器对象的create()方法
  • views.py的方法中,创建序列化器对象时,如果传参datainstance,那么在调用save()方法时,实际上调用的是序列化器对象的update()方法

2.基于上面,可进行的优化

  1. 可重写序列化器对象的create()方法,从而优化views.py中的新增方法
  2. 可重写序列化器对象的update()方法,从而优化views.py中的修改方法
    1. ProjectsSerializer.py中进行重写createupdate方法
    def create(self, validated_data):
        """
        新增user
        :param validated_data:
        :return:
        """
        return Projects.objects.create(**validated_data)

    # 如果在创建UserSerializer对象时,传参data和instance,则在调用save()方法时,
    # 实际调用的是序列化器对象中的update()方法
    def update(self, instance, validated_data):
        """
        更新user
        :param instance:
        :param validated_data:
        :return:
        """
        instance.name = validated_data['name']
        instance.leader = validated_data['leader']
        instance.tester = validated_data['tester']
        instance.programer = validated_data['programer']

        instance.publish_app = validated_data['publish_app']  # 这个字段只读,不进行反序列化,所以注释
        instance.desc = validated_data['desc']
        instance.save()
        return instance
  • 2.优化views.py的新增和修改方法
    然后修改postupdate方法
    新增方法:
 def post(self,request):
        #新增项目
        #1.从前端或者json格式的数据,转换为python中的类型;
        #为了严谨,需要做各种检验
        #比如:是否为json,传递的数据是否符合格式,必须传入的参数是否携带
        json_data = request.body.decode('utf-8')
        python_data= json.loads(json_data,encoding='utf-8')

        #反序列化
        serializer = ProjectsSerializer(data=python_data)
        try:
            serializer.is_valid(raise_exception=True)
        except Exception as e:
            return JsonResponse(serializer.errors)

        serializer.save()


        return JsonResponse(serializer.data,status=201)

修改方法:

 def put(self,request,pk):
        # 1.校验前端传递的pk(项目ID),类型正整数,是否存在
        # 2.获取指定id为pk的待修改项目
        project = Projects.objects.get(id = pk)
        #3.从前端获取json格式的数据,
        # 为了严谨,需要做各种检验
        # 比如:是否为json,传递的数据是否符合格式,必须传入的参数是否携带
        json_data = request.body.decode('utf-8')
        python_data = json.loads(json_data, encoding='utf-8')
        ser = ProjectsSerializer(data=python_data,instance=project)
        try:
            ser.is_valid(raise_exception=True)
        except  Exception as e:
            return JsonResponse(ser.errors)

运行结果都可运行成功;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值