Django REST framework--Swagger API文档生成器

news2025/1/10 10:33:05

Django REST framework--Swagger API文档生成器

    • swagger在线接口文档
      • drf-yasg安装与配置
        • 安装drf-yasg
        • 配置drf-yasg
        • 互动模式
        • 文档模式
      • 定制化用法(viewset模式)
        • 修饰视图装饰器api_view
        • 修饰视图集

swagger在线接口文档

目前为止,接口开发到了一定的阶段,已经初具规模,在和前端对接之前,需要规范化接口文档。如果纯手写的话工作量大且重复枯燥,因此,可以用工具帮助我们实现接口文档的自动生成。

Django REST Swagger 项目已经不维护了,并且不支持最新的Django,所以可以选择 drf-yasg 项目作为接口文档生成器。yasg 的功能非常强大,可以同时支持多种文档格式。

drf-yasg安装与配置

安装drf-yasg

pip install -U drf-yasg 	# 安装最新版 drf-yasg

配置drf-yasg

drf-yasg 也属于django的插件,因此需要注册到 settings.py 配置文件中

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'sqtp',
    'rest_framework', # 配置djangorestframework
    'drf_yasg', # 配置drf-yasg (API文档生成器)
]

drf_yasg需要与django.contrib.staticfiles配套使用,一般情况下,项目创建都会在INSTALLED_APPS列表中注册这个工具,如果没有,需要手动添加

修改sqtp应用app目录下的urls.py文件

from django.urls import path,include
from sqtp import views as sqtp_view

# 使用rest框架自带的路由器生成路由列表
from rest_framework.routers import DefaultRouter

# 使用 drf_yasg API文档生成器 视图和openapi
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

# 导入权限控制模块
from rest_framework import permissions

# 文档视图
schema_view = get_schema_view(
    # API 信息
    openapi.Info(
        title='SQTP API',   # API文档标题
        default_version='V1',   # 版本信息
        description='SQTP 接口文档',    # 描述内容
        terms_of_service='https://test.com',    # 开发团队地址
        contact=openapi.Contact(email='https://test.@163com',url='https://test.com'),   # 联系人信息:邮件、网址
        license=openapi.License(name='Test License'),    # 证书
    ),
    public=True,    # 是否公开
    permission_classes=(permissions.AllowAny,)   # 设置用户权限

)

router = DefaultRouter()
router.register(r'requests',sqtp_view.RequestViewSet)

urlpatterns = [
    path('',include(router.urls)),
    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'),   #文档模式
]

首先通过 get_schema_view函数去配置文档视图的信息,除了权限控制,其余信息只是作为展示用。

drf_yasg API文档生成器支持两种模式,互动模式和文档模式,分别配置其对应的路由swagger/redoc/,并通过with_ui方法去配置这两种模式。

互动模式

启动项目,在浏览器中输入http://127.0.0.1:8888/swagger/,进入互动模式,顶部展示的是文档信息,也就是schema_view里配置的内容

在这里插入图片描述

列表中展示的是接口信息

在这里插入图片描述

点击后可通过swagger进行接口测试,页面展示接口的传参内容,点击右上角Try it out

在这里插入图片描述

对接口信息进行修改后,点击Execute按钮,发送请求,页面会返回响应结果
在这里插入图片描述

文档模式

在浏览器中输入http://127.0.0.1:8888/redoc/,进入文档模式

在这里插入图片描述

该种模式下不能进行接口测试,但接口参数内容、参数信息和响应内容,都很详细

定制化用法(viewset模式)

当前的接口文档是没有定制化注释的,比如某个接口的功能是什么,从名称根据Rest风格就能猜测出来,但如果是些定制化的接口就需要加些注释了。

修饰视图装饰器api_view

修改sqtp应用app目录下的views.py文件,添加以下代码。比如这个接口,单纯就是返回一些信息,不想让用户访问,但是又不想让用户知道他没权限访问。这个接口并没有与数据库有数据交互,只是用了视图装饰器 api_view 处理请求和响应

@api_view('GET')
def testing_api(request):
    return Response(data={"retcode":status.HTTP_200_OK,'msg':'loading...'})

这里可以采用swagger_auto_schema装饰器修饰视图函数,operation_summary参数指 接口摘要信息、operation_description指 接口描述信息

# 导入swagger_auto_schema装饰器
from drf_yasg.utils import swagger_auto_schema

@swagger_auto_schema(method='GET',operation_summary='定制化API', operation_description='loading...')
@api_view('GET')
def testing_api(request):
    return Response(data={"retcode":status.HTTP_200_OK,'msg':'loading...'})

修改sqtp应用app目录下的urls.py文件,添加路由

urlpatterns = [
    path('',include(router.urls)),
    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'),   #文档模式
    path('testing/',sqtp_view.testing_api),
]

启动项目,在浏览器中输入http://127.0.0.1:8888/swagger/,进入互动模式,可以发现文档中新增了一个接口信息,展示swagger_auto_schema装饰器中的描述信息

在这里插入图片描述

修饰视图集

如果视图采用类或者视图集,视图函数本身是继承父类,没有出现在编写的代码中该如何自定义接口描述呢?

修改sqtp应用app目录下的views.py文件,添加以下代码

class RequestViewSet(viewsets.ModelViewSet):
    queryset = Request.objects.all()  # 数据的查询集
    serializer_class = RequestSerializer

这时,可以采用django装饰器配合swagger的装饰器来实现

# 导入django装饰器
from django.utils.decorators import method_decorator

@method_decorator(name='list',decorator=swagger_auto_schema(operation_summary='查询数据', operation_description='查询所有教师数据'))
@method_decorator(name='create',decorator=swagger_auto_schema(operation_summary='新增数据', operation_description='新增教师信息数据'))
@method_decorator(name='destroy',decorator=swagger_auto_schema(operation_summary='删除数据', operation_description='删除指定教师信息数据'))
class RequestViewSet(viewsets.ModelViewSet):
    queryset = Request.objects.all()  # 数据的查询集
    serializer_class = RequestSerializer

相当于是在django装饰器中再使用swagger的装饰器

在这里插入图片描述

这里参数 namelist指查询所有数据;create指新增数据;update指修改数据;destroy指删除数据;retrieve指查询单条数据;

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

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

相关文章

Spring AOP【统一异常处理与统一数据格式封装】

Spring AOP【统一异常处理与统一格式封装】🍎一.统一异常处理🍒1.1 实现一个异常方法🍒1.2 统一处理异常代码的实现🍒1.3 统一处理所有异常🍎二.统一格式封装🍒2.1 实现一个返回数据方法🍒2.2 统…

回收租赁商城系统功能拆解09讲-会员管理

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格,后台调整最终回收价,用户同意回收后系统即刻放款,用户微信零…

echarts省市区id(区域编码)实现地图下钻点击(data赋值自定义属性值,geojson信息获取)

致新的一年:不知不觉已经是2023年,祝新的一年大展宏图(兔),前途(兔)似锦,今年梦想实现! 正文: 接触echarts也有很长一段时间了,最近有个很常见的…

UE4 反射 学习笔记

想让类具有反射机制&#xff0c;必须要有这四个要素&#xff1a; 1、generated.h文件 2、UCLASS()宏 3、继承自UObject 4、GENERATED_BODY() void ABlurCharacter::BeginPlay() {Super::BeginPlay();ABlurCharacter *BlurCharacter NewObject<ABlurCharacter>();UCl…

直线检测算法汇总分析

直线检测算法汇总 1、场景需求 在计算机视觉领域&#xff0c;我们经常需要做一些特殊的任务&#xff0c;而这些任务中经常会用到直线检测算法&#xff0c;比如车道线检测、长度测量等。尽管直线检测的任务看起来比较简单&#xff0c;但是在具体的应用过程中&#xff0c;你会发…

MySQL50题

四张表&#xff1a; 1.学生表 Student&#xff08;s_id,s_name,s_birth,s_sex) 2.课程表Course(c_id,c_name,t_id) 3.教师表Teacher&#xff08;t_id&#xff0c;t_name) 4.成绩表Score(s_id,c_id,s_score) 建表语句&#xff1a; 创建学生表并且往表中插入语句 CREATE TABL…

如何下载通达信接口 费用如何?

之前我分享了自编的一些通达信指标公式。经粉丝咨询&#xff0c;我发现自己疏忽了一个问题&#xff1a;许多人不知道如何下载/使用通达信接口软件&#xff01; 通达信软件PC版&#xff0c;有以下两种形态&#xff1a; 第一种形态是官方版。 官方版的软件下载链接在这里&…

C语言—文件操作(学好文件操作,再也不用担心数据丢失)

专栏&#xff1a;C语言 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些C语言的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 文件操作前言一、为什么使用文件二、什么是文件1.…

Leetcode:538. 把二叉搜索树转换为累加树(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 反中序遍历法&#xff1a; 原理思路&#xff1a; 迭代&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&…

共享模型之管程(九)

1.ReentrantLock可重入锁 1.1.简介 1>.可重入是指同一个线程如果首次获得了这把锁,那么由于它是这把锁的拥有者,因此该线程有权利(/优先)再次获取这把锁;如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住; ReentrantLock底层也是基于Monitor对象实现的,只不过它是在…

java支持的数据类型2023006

Java语言支持的类型分为两类&#xff1a;基本类型&#xff08;Primitive Type&#xff09;和引用类型&#xff08;Reference Type&#xff09;。 –基本类型包括boolean类型和数值类型。数值类型有整数类型和浮点类型。整数类型包括byte、short、int、long、char&#xff0c;浮…

dp(九)不同的子序列

不同的子序列_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目&#xff0c;配有官方题解&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/ed2923e49d3d495f83…

Vue知识系列-axios

一、axios基础知识 axios是独立于vue的一个项目&#xff0c;基于promise用于浏览器和node.js的http客户端。 在浏览器中可以帮助我们完成ajax请求的发送在node.js中可以向远程接口发送请求 二、axios应用场景 三、axios的使用 第一步&#xff1a;创建html文件&#xff0c;在…

6.见过最强的后台管理系统

芋道&#xff0c;以开发者为中心&#xff0c;打造中国第一流的快速开发平台&#xff0c;全部开源&#xff0c;个人与企业可 100% 免费使用。 架构图 管理后台的 Vue3 版本采用 vue-element-plus-admin &#xff0c;Vue2 版本采用 vue-element-admin 管理后台的移动端采用 uni-…

虹科方案 | 医药行业专用ECOLOG即插即用室内和设施环境监控系统

虹科ELPRO ECOLOG Plug&Play 连续监测解决方案采用功能强大的新ECOLOG-PRO硬件模块和ECOLOG-PRO Base服务器解决方案。即插即用是虹科ELPRO室内和设施环境监测解决方案增强型系列的一部分。ECOLOG即插即用是一种多功能&#xff0c;经济的系统&#xff0c;专为需要监测少于5…

转换流:代码与文件编码不一致读取乱码的问题

字符输入转换流&#xff1a;package com.gao;import java.io.*;public class transfer_stream {public static void main(String[] args) throws Exception {InputStream in new FileInputStream("E:\\黑马教育\\demo.txt");Reader re new InputStreamReader(in,&q…

Postman(07)Postman+OMySQL操作数据库

一、本文解决的问题 ● Postman断言需要查询数据存储情况&#xff1b; ● 部分业务需要从数据库中获取验证码&#xff08;例如登录&#xff09;&#xff1b; ● 自动化场景需要执行数据正确性比对。 二、OMySQL连接数据库 1、OMySQL安装与启动 1.1 安装node.js 这个百度一…

【windows】VMware Workstation 不可恢复错误:(vmui) 错误代码0xc0000094

【问题描述】 打开需要启动的虚拟机后&#xff0c; 修改设备参数的时候&#xff0c;提示&#xff1a; VMware Workstation 不可恢复错误: (wmui) Exception 0xc0000094 has occurred。 【解决方法】 由于搭建的虚拟机环境一直在使用&#xff0c; 后来发现是VMware升级到17.0后…

【回眸】牛客网刷刷刷(三) Linux(续)软件工程(专题)

前言 近期的牛客网学习内容有Linux专题&#xff0c;以下记录一些笔试题中的Linux的知识点。 知识点 -u 用户号 指定用户的用户号&#xff1b;因为系统用户的用户号为 0&#xff0c;故指定用户号为 0&#xff1b; 如果同时有 -o 选项&#xff0c;则可以重复使用其他用户的标识…

马来酰亚胺-二硫键-活性酯;MAL-SS-NHS结构式

英 文 &#xff1a;MAL-SS-NHS 中文&#xff1a;马来酰亚胺-双硫键-活性酯 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&#xff0c;取决于分子量 注意事项&#xff1a;取用…