drf用APIView反序列化保存数据

from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from .models import Book

class BookSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=8, min_length=3)
    price = serializers.IntegerField(max_value=100, min_value=10)

    def create(self, validated_data):
        book=Book.objects.create(**validated_data)
        return book
    def update(self, instance, validated_data):
        # instance:对象
        # validated_data 数据
        # 笨办法-y优化--》使用反射
        instance.name = validated_data.get('name')
        instance.price = validated_data.get('price')
        instance.save()  # 更改保存到数据中
        return instance
from urllib.parse import unquote

from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
from rest_framework.views import APIView

from normal.models import Book


# Create your views here.

# class BookView(View):
#     def get(self, request):
#         obj_list = Book.objects.all()
#         l = []
#         for i in obj_list:
#             l.append({"name": i.name, "price": i.price})
#         return JsonResponse({'code': 100, 'msg': "查询成功", 'results': l})
#
#     # 增加
#     def post(self, request):
#         # urlencode和form-data格式
#         data = request.POST
#         Book.objects.create(name=data.get('name'), price=data.get('price'))
#         return JsonResponse({'code': 100, 'msg': "新增成功", })
#
#
# class BookDetailView(View):
#     def get(self, request, pk):
#         obj = Book.objects.filter(pk=int(pk)).first()
#         return JsonResponse({'code': 100, 'msg': "查询成功", 'results': {'name': obj.name, 'price': obj.price}})
#
#     # 修改
#     def put(self, request, pk):
#         # request.body bytes格式转换成字符串
#         data = request.body.decode('utf-8')
#         print(data)
#         book_list=data.split('&')  # 拿到一个列表
#         dic = {}
#         for item in book_list:
#             # 转码只给value转
#             dic[item.split('=')[0]] = unquote(item.split('=')[1])
#         print(dic)
#         Book.objects.filter(pk=int(pk)).update(**dic)
#         return JsonResponse({'code': 100, 'msg': "修改成功"})
#
#     def delete(self, request, pk):
#         obj = Book.objects.filter(pk=int(pk)).delete()
#         return JsonResponse({'code': 100, 'msg': "删除成功"})
from .serializer import BookSerializer
from rest_framework.response import Response
class BookView(APIView):
    def get(self, request):
        obj_list = Book.objects.all()
        # 多条数据many=True
        serializer = BookSerializer(instance=obj_list,many=True)
        return Response({'code': 100, 'msg': "查询成功", 'results': serializer.data})
    # 增加
    def post(self, request):
        # 校验数据
        serializer=BookSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({'code': 100, 'msg': "保存成功"})
        else:
            return Response({'code': 101, 'msg':"保存失败", 'results': serializer.errors})


class BookDetailView(APIView):
    def get(self, request, pk):
        obj = Book.objects.filter(pk=pk).first()
        serializer = BookSerializer(instance=obj)
        return Response({'code': 100, 'msg': "查询成功", 'results':serializer.data})

    # 修改
    def put(self, request, pk):
        book_obj=Book.objects.filter(pk=pk).first()
        serializer = BookSerializer(instance=book_obj,data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({'code': 100, 'msg': "修改成功"})
        else:
            return Response({'code': 101, 'msg':"保存失败", 'results': serializer.errors})

    def delete(self, request, pk):
        obj = Book.objects.filter(pk=int(pk)).delete()
        return JsonResponse({'code': 100, 'msg': "删除成功"})

posted @ 2024-04-17 22:07  -半城烟雨  阅读(2)  评论(0编辑  收藏  举报