编写psot、get、delete、put5个接口

1.不使用drf写5个接口

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.IntegerField()
mode
复制代码
#1  不使用drf写5个接口
# 图书新增:psot  图书查询所有:get
class BookView(View):
    def get(self, request):
        books = []
        book_list = Book.objects.all()
        # book_list=[book1,book2]
        for book in book_list:
            books.append({'id':book.id,'name': book.name, 'price': book.price})
        return JsonResponse(books, safe=False,json_dumps_params={'ensure_ascii':False})
    def post(self,request):
        # 前端传入的
        name=request.POST.get('name')
        price=request.POST.get('price')
        # 存到表中
        book=Book.objects.create(name=name,price=price)
        # return JsonResponse({'id':book.id,'name':book.name,'price':book.price})
        return JsonResponse({'msg':'新增成功','code':100})
# 图书查询一个:get  ,图书修改一个:put  ,图书删除一个:delete
class BookDetailView(View):
    def get(self,request,pk):
        book = Book.objects.all().filter(pk=pk).first()
        return JsonResponse({'id':book.id,'name':book.name,'pirce':book.price})
    def delete(self,request,pk):
        Book.objects.all().filter(pk=pk).delete()
        return JsonResponse({'code':100,'msg':"删除成功"})


    def put(self,request,pk):
        # 前端传入的,put请求从django 的POST取不出来
        import json
        try:
            data=json.loads(request.body)
        except Exception as e:
            data=request.POST
        request.data=data
        book=Book.objects.all().filter(pk=pk).first()
        book.price=request.data.get('price')
        book.name=request.data.get('name')
        book.save()

        return JsonResponse({'code':100,'msg':"修改成功"})
复制代码

 

2.使用drf的APIView写5个接口

复制代码
from rest_framework.views import APIView
# 图书新增:psot  图书查询所有:get
class BookView(APIView):
    def get(self, request):
        books = []
        book_list = Book.objects.all()
        for book in book_list:
            books.append({'id':book.id,'name': book.name, 'price': book.price})
        return JsonResponse(books, safe=False,json_dumps_params={'ensure_ascii':False})
    def post(self,request):
        # 前端传入的,继承了APIView
        name=request.data.get('name')
        price=request.data.get('price')
        # 存到表中
        book=Book.objects.create(name=name,price=price)
        # return JsonResponse({'id':book.id,'name':book.name,'price':book.price})
        return JsonResponse({'msg':'新增成功','code':100})
# 图书查询一个:get  ,图书修改一个:put  ,图书删除一个:delete
class BookDetailView(APIView):
    def get(self,request,pk):
        book = Book.objects.all().filter(pk=pk).first()
        return JsonResponse({'id':book.id,'name':book.name,'pirce':book.price})
    def delete(self,request,pk):
        Book.objects.all().filter(pk=pk).delete()
        return JsonResponse({'code':100,'msg':"删除成功"})


    def put(self,request,pk):
        book=Book.objects.all().filter(pk=pk).first()
        book.price=request.data.get('price')
        book.name=request.data.get('name')
        book.save()
        return JsonResponse({'code':100,'msg':"修改成功"})
Views
复制代码

3.使用APIView+序列化类(序列化:查单个,查所有)+Response来写5个接口

Views
serializers

4.使用APIView+序列化类(序列化:查单个,查所有 反序列化:新增一个,修改一个)+Response来写5个接口

复制代码
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializer import BookSerializer
# 图书新增:psot  图书查询所有:get
class BookView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        ser=BookSerializer(instance=book_list,many=True)
        return Response(ser.data)
    def post(self,request):
        # 反序列化---》传得是data=前端传入的数据request.data
        ser=BookSerializer(data=request.data)
        # 数据校验
        if ser.is_valid():  # forms组件就这么做的
            # 保存-->会报错----》需要在序列化类中重写create方法
            ser.save()
            return Response({'msg':'新增成功','code':100})
        else:
            print(ser.errors)
            return Response({'msg': '数据没有校验通过', 'code': 101})
# 图书查询一个:get  ,图书修改一个:put  ,图书删除一个:delete
class BookDetailView(APIView):
    def get(self,request,pk):
        book = Book.objects.all().filter(pk=pk).first()
        ser = BookSerializer(instance=book)
        return Response(ser.data)
    def delete(self,request,pk):
        Book.objects.all().filter(pk=pk).delete()
        return Response({'code':100,'msg':"删除成功"})


    def put(self,request,pk):
        # 修改,就有book对象,拿到要修改的对象
        book=Book.objects.filter(pk=pk).first()
        # 使用data的数据,修改book这个对象
        ser = BookSerializer(instance=book,data=request.data)
        if ser.is_valid():
            # 会报错,需要重写序列化类的updata方法
            ser.save()
            return Response({'code':100,'msg':"修改成功"})
        else:
            return Response({'code': 101, 'msg': "修改失败"})
Views
复制代码
复制代码
    def create(self, validated_data):
        book=Book.objects.create(**validated_data)
        return book 

    def update(self, instance, validated_data):
        instance.name=validated_data.get('name')
        instance.price=validated_data.get('price')
        instance.save()   # 一定不要忘了保存,才存到数据库
        return instance  # 一定要return新增的对象
mode
复制代码

 

posted @   末笙  阅读(119)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示