编写psot、get、delete、put5个接口
1.不使用drf写5个接口

class Book(models.Model): name = models.CharField(max_length=32) price = models.IntegerField()
#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':"修改成功"})
3.使用APIView+序列化类(序列化:查单个,查所有)+Response来写5个接口


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': "修改失败"})

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新增的对象
分类:
diango习题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人