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

相关推荐
treasure140几秒前
Django复习笔记(2026年10月)
后端·python·django·api·web·drf
ycydynq1 天前
django 添加信息时,对外键设置条件
数据库·python·django
智购科技无人售货机厂家1 天前
自动售货机物联网平台为什么会出现在线状态不一致?~YH
python·单片机·嵌入式硬件·django·pygame
FYKJ_20102 天前
springboot高考志愿填报推荐系统14332-计算机课程设计、毕业设计
javascript·spring boot·python·架构·django·课程设计·高考
我的xiaodoujiao2 天前
Django 权限系统项目实战详细图文教程 3--系统登录功能实现
后端·python·django
我的xiaodoujiao2 天前
Django 权限系统项目实战详细图文教程 4--系统登录功能实现 2
后端·python·django
2501_944521593 天前
Immer 跨端三方库仓颉适配全流程
python·eclipse·django
2501_948122633 天前
Qs 跨端三方库仓颉适配全流程
python·react native·django·tornado
CS创新实验室3 天前
改了模型,数据库为什么能自动跟上?——Django 迁移(migrations)的底层
数据库·django·sqlite
weixin_BYSJ19874 天前
电竞先锋网站---附源码02032
java·vue.js·spring boot·python·django·tomcat·php