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

相关推荐
橘猫云计算机设计2 小时前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计
靠近彗星5 小时前
基于 Vue + Django + MySQL 实现个人博客/CMS系统
前端·vue.js·python·mysql·django
橘猫云计算机设计7 小时前
基于ssm的食物营养成分数据分析平台设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
后端·python·信息可视化·数据挖掘·数据分析·django·毕业设计
神奇侠20248 小时前
快速入手-基于DRF的过滤、分页、查询配置(十五)
django·django-filter
爱摄影的程序猿11 小时前
Python Web 框架 django-vue3-admin快速入门 django后台管理
前端·python·django
唐古乌梁海11 小时前
【Django】教程-7-分页,默认使用django的
django
qr9j4223315 小时前
Django自带的Admin后台中如何获取当前登录用户
数据库·django·sqlite
咖啡调调。17 小时前
简单视图函数
django
神奇侠20241 天前
快速入手-基于Django-rest-framework的serializers序列化器(二)
后端·python·django
神奇侠20241 天前
快速入手-基于Django-rest-framework的第三方认证插件(SimpleJWT)权限认证(十)
django·simplejwt