快速入手-基于Django-rest-framework的APIView类升级版GenericAPIView(四)
1、基础代码基于以下链接去完善
快速入手-基于Django-rest-framework的ModelSerializer模型序列化器(三)-CSDN博客
2、只需要修改api模块中的views.py
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.generics import GenericAPIView
from .models import *
from api.serializer import *
class Linkapi(GenericAPIView):
queryset = Link.objects.all()
serializer_class = LinkSerializer
# 查看所有字段
def get(self, request):
xuliehua = self.get_serializer(instance=self.get_queryset(), many=True)
return Response(xuliehua.data)
# 新增数据
def post(self, request):
# xuliehua = LinkSerializer(data=request.data)
xuliehua = self.get_serializer(data=request.data)
if xuliehua.is_valid():
xuliehua.save()
return Response(xuliehua.data)
else:
return Response(xuliehua.errors)
# 指定一条的请求 删除 查一条、修改一条
class Linkapidetail(GenericAPIView):
queryset = Link.objects.all()
serializer_class = LinkSerializer
# 查询单条记录
def get(self, request, pk):
# 由于单查,更新,删除都调用了这个查询,为了避免错误和集中管理
# 可以新建一个方法放查询模型类的sql预计,之后在用try: except Exception as e:
# 没有查到返回raise HTTP404()
# link = Link.objects.get(pk=id)
# 序列化
# xuliehua = LinkSerializer(instance=link, many=False)
xuliehua = self.get_serializer(instance=self.get_object(), many=False)
return Response(xuliehua.data)
# 更新单条数据
def put(self, request, pk):
# update_link = Link.objects.get(pk=id)
# xuliehua = LinkSerializer(instance=update_link, data=request.data)
xuliehua = self.get_serializer(instance=self.get_object(), data=request.data)
if xuliehua.is_valid():
xuliehua.save()
return Response(xuliehua.data)
else:
return Response(xuliehua.errors)
# 更新单条数据中的部分字段 ,和put方法里边内容几乎一样,除了partial=True
def patch(self, request, pk):
# update_link = Link.objects.get(pk=id)
# xuliehua = LinkSerializer(instance=update_link, data=request.data, partial=True)
xuliehua = self.get_serializer(
instance=self.get_object(), data=request.data, partial=True
)
if xuliehua.is_valid():
xuliehua.save()
return Response(xuliehua.data)
else:
return Response(xuliehua.errors)
def delete(self, request, pk):
# Link.objects.get(pk=id).delete()
self.get_object().delete()
return Response("删除成功")
3、api模块里的路由写的不规范,需要修改一下
re_path("linkapi/(?P<pk>\d+)", views.Linkapidetail.as_view()),
4、基于apifox去测试即可