快速入手-基于Django-rest-framework的APIView类升级版GenericAPIView(四)

1、基础代码基于以下链接去完善

快速入手-基于Django-rest-framework的ModelSerializer模型序列化器(三)-CSDN博客

2、只需要修改api模块中的views.py

python 复制代码
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模块里的路由写的不规范,需要修改一下

python 复制代码
re_path("linkapi/(?P<pk>\d+)", views.Linkapidetail.as_view()),

4、基于apifox去测试即可

相关推荐
源码之家20 小时前
计算机毕业设计:Pyhon健康数据分析系统 Django框架 数据分析 可视化 身体数据分析 大数据(建议收藏)✅
大数据·python·数据挖掘·数据分析·django·lstm·课程设计
vx_biyesheji00041 天前
计算机毕业设计:Python医疗数据分析平台 Flask框架 数据分析 可视化 医疗大数据 用户画像(建议收藏)✅
大数据·python·深度学习·数据分析·django·flask·课程设计
源码之家1 天前
计算机毕业设计:Python医疗数据可视化系统 Flask框架 数据分析 可视化 医疗大数据 用户画像(建议收藏)✅
python·深度学习·信息可视化·数据分析·django·flask·课程设计
Wonderful U1 天前
【前后端】如何使用agent来实现django+vue的前后端开发
vue.js·django
QQ8057806511 天前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
凯瑟琳.奥古斯特3 天前
Django Flask FastAPI 三者对比
开发语言·python·django·flask·fastapi
Betelgeuse763 天前
Django 中间件 4 大钩子 & CBV vs FBV 对比实战
python·中间件·django
北冥有羽Victoria4 天前
Django中间件实战:FBV/CBV日志全兼容
数据库·vscode·后端·python·django·sqlite·开源
源码之家5 天前
计算机毕业设计:Python中药材数据可视化与智能分析平台 Django框架 中药数据分析 医药数据分析数据分析 可视化 爬虫 (建议收藏)✅
python·深度学习·信息可视化·数据分析·django·课程设计
q_35488851535 天前
计算机毕业设计:Python中药材天地网数据挖掘与可视化系统 Django框架 中药数据分析 医药数据分析数据分析 可视化 爬虫 (建议收藏)✅
python·数据挖掘·数据分析·django·flask·课程设计