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

相关推荐
SelectDB技术团队9 小时前
腾讯音乐内容库 ES 替代:从 Elasticsearch 到 Apache Doris 统一搜索分析引擎实践
elasticsearch·django·apache doris
willhu20081 天前
Windows 开机自动启动 Django 项目
后端·python·django
En^_^Joy1 天前
Django模板与静态文件使用指南
python·django·sqlite
weixin_BYSJ19871 天前
springboot小区物业管理小程序---附源码45555
java·javascript·spring boot·python·django·flask·php
En^_^Joy1 天前
Django中间件:请求拦截和响应(类似装饰器)
中间件·django·sqlite
qq_22589174661 天前
基于Flask的空气质量监测与预测分析系统
开发语言·后端·python·信息可视化·django·flask
资源大佬星 课it2 天前
重学C++ ,重构你的C++知识体系
vue.js·docker·django
IT学长编程2 天前
计算机毕业设计 基于用户评论主题挖掘的旅游景点推荐系统 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·python·django·毕业设计·数据可视化分析·旅游景点推荐系统·基于用户评论主题挖掘
小白勇闯网安圈3 天前
Django Form 组件详解:从表单生成到 ModelForm 数据校验
数据库·django·sqlite
言乐63 天前
Python实现随机抽人回答问题
开发语言·python·django·virtualenv·pygame