drf-yasg —— Django REST Framework 文档生成

news2024/11/15 1:41:39

drf-yasg —— Django REST Framework 文档生成
drf-yasg 安装及全局配置
安装以及这个官方文档非常详细的描述了,我就不多说了。

配置好并运行 Django 项目以后,就可以使用浏览器访问 /swagger/ 和 /redoc/ (链接取决于你的 urls 的配置)看到两种风格的文档了。我个人比较喜欢 Swagger 的,所以下面均用 Swagger 文档的界面作截图。
在 Parameters 和 Response 的地方默认展示 Example Value 而不是 Model,所以各位可以在 <project_name>/settings.py 中添加下面几行:

SWAGGER_SETTINGS = {
    'DEFAULT_MODEL_RENDERING': 'example'
}

Swagger 的方法是使用 drf_yasg.utils.swagger_auto_schema 作为装饰器修饰每个视图。

可以装饰 Django 风格的 View:

from drf_yasg.utils import swagger_auto_schema

@swagger_auto_schema(
    method='POST',
    operation_summary='注册新用户',
    operation_description='成功返回 201\n'
                          '失败(参数错误或不符合要求)返回 400',
)
@api_view(['POST'])
def signup(request: WSGIRequest) -> Response:
    register_serializer = UserRegisterSerializer(data=request.data)
    if register_serializer.is_valid():
        u = register_serializer.save()
        user_serializer = UserSerializer(u)
        return Response(user_serializer.data, status=status.HTTP_201_CREATED)
    return Response(register_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

也可以对 APIView 的 post get 等函数进行装饰:

class ActivityCheckInView(APIView):
    @swagger_auto_schema(
        operation_summary='用户签到',
        operation_description='可能会有以下情况:\n'
                              '1. 签到成功,用户经验+10,每位管理员经验+50,返回 200\n'
                              '2. 活动不存在,返回 404\n'
                              '3. POST 数据不包含签到码,返回 400\n'
                              '4. 演讲者关闭了签到,返回 403\n'
                              '5. 签到码错误,返回 403\n'
                              '注:要求登录,否则返回 403',
        request_body=Schema_object(Schema_check_in_code),
        responses={201: None, 403: Schema_object(Schema_detail)}
    )
    def post(self, request: WSGIRequest, id: int) -> Response:
        if not Activity.objects.filter(id=id):
            return Response({"detail": "活动不存在"}, status=status.HTTP_404_NOT_FOUND)
        activity = Activity.objects.get(id=id)
        if "check_in_code" not in request.POST:
            return Response({"detail": "POST 数据不包含签到码"}, status=status.HTTP_400_BAD_REQUEST)
        if activity.datetime.date() != datetime.now().date():
            return Response({"detail": "非当日活动"}, status=status.HTTP_403_FORBIDDEN)
        if not activity.check_in_open:
            return Response({"detail": "演讲者已关闭签到"}, status=status.HTTP_403_FORBIDDEN)
        if request.POST["check_in_code"] != activity.check_in_code:
            return Response({"detail": "签到码错误"}, status=status.HTTP_403_FORBIDDEN)

        activity.attender.add(request.user)

        return Response(status=status.HTTP_200_OK)

还可以对 GeneticAPIView 进行装饰:

from django.utils.decorators import method_decorator

@method_decorator(name="get", decorator=swagger_auto_schema(
        operation_summary='获取沙龙信息',
        operation_description='获取沙龙信息\n'
                              '注:需要登录',
))
@method_decorator(name="put", decorator=swagger_auto_schema(
    operation_summary='更新沙龙信息',
    operation_description='应答和 PATCH 方法相同,但 PUT 要求在请求中提交所有信息,不推荐使用',
))
@method_decorator(name="patch", decorator=swagger_auto_schema(
    operation_summary='更新沙龙部分信息',
    operation_description='更新沙龙信息,成功返回 200\n'
                          '如沙龙不存在,返回 404\n'
                          '如更新值不合法,返回 400\n'
                          '注:更新参与者名单请使用 `/users/check_in/` 或 `/users/check_in_admin/` 接口\n'
                          '注:需要是沙龙演讲者或管理员,否则返回 403\n'
                          '注:PATCH 方法可以只提交更新的值,也可以提交所有值',
))
@method_decorator(name="delete", decorator=swagger_auto_schema(
    operation_summary='删除沙龙',
    operation_description='删除沙龙,成功返回 204\n'
                          '注:需要是沙龙演讲者或管理员,否则返回 403',
))
class ActivityDetailView(RetrieveUpdateDestroyAPIView):
    permission_classes = (IsAuthenticated, IsPresenterOrAdminOrReadOnly, )
    queryset = Activity.objects.all()
    serializer_class = ActivitySerializer

对于 GeneticAPIView,Swagger 能够自动捕获其 Serializer 以及 ModelSerializer 并作为参数!除此之外,它还可以正确识别各 Serializer 类中的read_only_fields,并在请求的 Parameters 中去掉!
当然,对于 APIView 和 Django View,也是可以在 swagger_auto_schema 手动设置参数、返回值的。而如果对 GeneticAPIView 设置后,就会覆盖原来的设置。
对于 POST、PATCH 的放在 request_body 里的数据格式,可以放在 request_body 的参数部分,这个参数可以接收 rest_framework.Serializer 双厨狂喜,或是 openapi.Schema。
response 的参数也是类似,只是变成了一个 dict,因为每种 response body 应当对应一个 HTTP 状态码。
文档中提到,如果 responses 参数中没有 2xx 类的,会自动添加一个 200(对于 GET PUT PATCH),或是 201 (对于 POST)或 204(对于 DELETE)。要想屏蔽这个 2xx,只需要添加 {200: None}。

这个 None 有用,但是并不能通过 Pycharm 的类型检测(强迫症震怒):

作为强迫症,可以定义一个 Schema_none = None,然后:
在这里插入图片描述

绕开 Pycharm 的类型检测

在这里插入图片描述
django doesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS.
在这里插入图片描述
name=‘模块名的路径’

GenericAPIView与APIView 作为两大继承视图的区别
GenericViewSet和ViewSet都继承了ViewSetMixin,as_view都可以配置 请求-函数 映射
GenericViewSet继承的是GenericAPIView视图类,用来完成标准的model类操作接口
ViewSet继承的是APIView视图类,用来完成不需要model类参与,或是非标准的model类操作接口post请求在标准的model类操作下就是新增接口,登陆的post不满足post请求验证码接口,不需要model类的参与

drf视图基类,视图扩展类和视图子类
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

看见统计——第五章 统计推断:贝叶斯学派

看见统计——第五章 统计推断&#xff1a;贝叶斯学派 引言 推理的频率学派认为&#xff0c;概率在本质上是与频率联系在一起的。这种解释实际上是很自然的。按照频率学派的说法&#xff0c;一枚公平的硬币出现人头的概率是1/2。简单地说&#xff0c;在同一个硬币的无限次独立…

打造一款日志分析工具

一、简介 作为一名安全从业者&#xff0c;网络安全事件的应急响应工作是必不可少的&#xff0c;那么在应急支撑时&#xff0c;针对大量的日志数据便需要借助自动化工具实现快速的归类检测&#xff0c;并提取出所需的关键日志数据。本篇文章主要通过利用python语言编写一款web日…

自带超多工具,好用又免费,这3款手机浏览器你用过了吗

手机浏览器是我们手机中必备的一款软件APP&#xff0c;一款好用的浏览器&#xff0c;可以帮助我们提高工作效率&#xff0c;节省时间。对于懒癌患者来说&#xff0c;手机上安装各种各种的app很麻烦&#xff0c;下面给大家介绍自带超多的工具&#xff0c;好用且免费的浏览器&…

SpringCloud网关Zuul和GateWay区别

getway和zuul没有进行参数调优的时候&#xff0c;getway的性能会远高于zuul。 分析&#xff0c;在空负载的时候&#xff0c;SpringCloud Gateway比zuul 1 性能高50%左右&#xff0c;在模拟处理50ms业务后&#xff0c;&#xff0c;SpringCloud Gateway比zuul 1 性能高9倍左右。 …

嵌入式Qt 开发一个视频播放器

上篇文章&#xff1a;嵌入式 Qt开发一个音乐播放器&#xff0c;使用Qt制作了一个音乐播放器&#xff0c;并在OK3568开发板上进行了运行测试&#xff0c;实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件&#xff0c;可以实现视频列表的显示与选择播放等&#xff0c;先…

【干货】如何用低代码帮助企业实施OKR?

近年来受疫情的影响&#xff0c;许多企业都开始使用 OKR来进行目标管理。OKR是一套让企业持续保持活力的有效管理工具&#xff0c;能够帮助企业实现目标、激励员工、增加团队凝聚力、减少组织内耗&#xff0c;从而进一步实现创新。但是在实际布局中&#xff0c;很多企业在使用 …

基础面试题 :大端、小端及转换方式

理解网络中大端和小端往往是一道基础面试题 &#xff0c;这里作为记录和整理&#xff0c;希望能帮到大家 目录 前言 一、字节序 二、什么小端顺序 三、什么大端顺序 四、处理器体系所属网络字节顺序 五、大小端转换 1、大端整形转换为小端 2、小端转换为小端 3、…

知乎x-zse-96 参数补环境

本文精工学习参考 目标链接 aHR0cHM6Ly93d3cuemhpaHUuY29tL3NlYXJjaD90eXBlPWNvbnRlbnQmcT1weXRob24接口分析 参数x-zse-93&#xff1a;相当于版本号 参数x-zse-96&#xff1a;看起来需要破解 参数x-zst-81&#xff1a;请求发现可以置空 综上所述x-zse-96才需要逆向。 参数…

中间件安全—Apache常见漏洞

中间件安全—Apache常见漏洞1.Apache常见漏洞1.1.Apache介绍1.2.Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09;1.2.1.漏洞介绍1.2.2.漏洞环境1.2.2.1.运行漏洞环境1.2.2.2.访问漏洞环境1.2.3.漏洞复现1.2.3.1.拦截1.2.3.2.添加换行1.2.3.3.访问文件1.3.Apa…

[机器学习]卷积神经网络DLC

一、基本结构 CNN的大概模式可以总结为&#xff1a;卷积层池化层全连接层激活函数 而一些比较大型的网络如VGG一般将CNN作为构成单元进行堆叠&#xff0c;而内部卷积核和池化也可以堆叠多个。各个部分的功能如下&#xff1a; 卷积&#xff1a;特征提取 池化&#xff1a;降维和防…

硬件设备 之一 详解 JTAG、SWD 接口、软 / 硬件断点、OpenOCD、J-link

JTAG 和 SWD 在嵌入式开发中可以说是随处可见&#xff0c;他们通常被用来配合 J-Link 、ULINK、ST-LINK 等仿真器在线调试嵌入式程序。此外&#xff0c;还有飞思卡尔芯片中的 Background debug mode&#xff08;BDM&#xff09; 接口&#xff0c;Atmel 芯片中的 debugWIRE &…

文本生成图像应用指南【Stable Diffusion】

Stable Diffusion 是一种文本到图像的潜在扩散模型&#xff0c;由来自 CompVis、Stability AI 和 LAION 的研究人员和工程师创建。 它使用来自 LAION-5B 数据库子集的 512x512 图像进行训练。 稳定扩散&#xff0c;生成人脸&#xff0c;也可以在自己的机器上运行&#xff0c;如…

车载技术开发—{Android CarFrameWork}

Android Automotive平台 Android Automotive是通过Android的通用框架&#xff0c;语言和API来实现的一个全栈&#xff0c;开源&#xff0c;高度可定制的平台。 Android Automotive与整个Android生态系统的关系 Android Automotive是Android的一部分。 Android Automotive不是…

pbootcms被黑木马问题(3)

昨天经过同事告知发现了很早之间做的几个企业官方都中木马了,然后看了一下木马情况,跟之间的两次都有所不同,这里记录一下新的木马的清理过程,有遇到的朋友可以借鉴一下。&#xff08;之前有做过一些防止批量扫站的措施&#xff0c;因为嫌麻烦就没有给这些网站上进行修改&#…

【Spark分布式内存计算框架——Spark SQL】13. 自定义UDF函数

第七章 自定义UDF函数 无论Hive还是SparkSQL分析处理数据时&#xff0c;往往需要使用函数&#xff0c;SparkSQL模块本身自带很多实现公共功能的函数&#xff0c;在org.apache.spark.sql.functions中。SparkSQL与Hive一样支持定义函数&#xff1a;UDF和UDAF&#xff0c;尤其是U…

黑格尔的实践观探究

&#xff08;江苏大学马克思主义学院 212000&#xff09;一、引言人的独特性在于实践活动&#xff0c;以及由实践活动带来的人类社会的不断进化与发展。人类的实践史体现了人的全部本质。但是&#xff0c;人类从理论的高度反思自己的实践活动&#xff0c;尤其是在哲学的层面上进…

【基础算法】之 冒泡排序优化

冒泡排序思想基本思想: 冒泡排序&#xff0c;类似于水中冒泡&#xff0c;较大的数沉下去&#xff0c;较小的数慢慢冒起来&#xff08;假设从小到大&#xff09;&#xff0c;即为较大的数慢慢往后排&#xff0c;较小的数慢慢往前排。直观表达&#xff0c;每一趟遍历&#xff0c;…

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——shuffle机制

3.3.1Shuffle机制 Map方法之后&#xff0c;Reduce方法之前的数据处理过程称之为Shuffle。 3.3.2Partition分区 1、问题引出 要求将统计结果按照条件输出到不同文件中&#xff08;分区&#xff09;。比如&#xff1a;将统计结果按照手机归属地不同省份输出到不同文件中&#…

2023春季露营投影怎么选?轻薄投影极米Z6X Pro值得推荐

近年来&#xff0c;露营经济在多重因素的共同助推下快速发展&#xff0c;精致露营的攻略开始占据小红书、微博、朋友圈等各类社交平台&#xff0c;吸引着更多用户种草并加入到露营大军中&#xff0c;而露营经济的强势“破圈”给家用智能投影带来了更多的发展契机。凭借着小巧的…

探访上汽通用武汉奥特能超级工厂

上汽通用汽车在电动化和智能网联化新技术领域投入了700亿大洋&#xff0c;武汉奥特能超级工厂就是其中一个重点项目。这个工厂已经投产&#xff0c;将成为上汽通用汽车的新能源生产基地&#xff0c;加速奥特能平台车型的推出。 最近别克推出了Electra E5&#xff0c;它是别克第…