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=Truedef 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去测试即可