快速入手-基于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去测试即可

相关推荐
百锦再1 天前
[特殊字符] Python在CentOS系统执行深度指南
开发语言·python·plotly·django·centos·virtualenv·pygame
计算机编程小央姐1 天前
跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
大数据·hadoop·信息可视化·spark·django·课程设计·食物
诗句藏于尽头1 天前
Django模型与数据库表映射的两种方式
数据库·python·django
IT学长编程2 天前
计算机毕业设计 基于Hadoop豆瓣电影数据可视化分析设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试
大数据·hadoop·python·django·毕业设计·毕业论文·豆瓣电影数据可视化分析
Python私教2 天前
Django全栈班v1.04 Python基础语法 20250912 下午
后端·python·django
凡梦千华2 天前
Django时区感知
后端·python·django
程序设计实验室2 天前
Django过时了吗?从ASGI到AI时代的思考
django
Python私教3 天前
Django全栈班v1.04 Python基础语法 20250912 上午
后端·python·django
言之。3 天前
Django REST框架:ModelViewSet全面解析
数据库·python·django
魂尾ac3 天前
Django + Vue3 前后端分离技术实现自动化测试平台从零到有系列 <第一章> 之 注册登录实现
后端·python·django·vue