Django自动生成Swagger接口文档 —— Python

1. 前言

当接口开发完成,紧接着需要编写接口文档。传统的接口文档通常都是使用Word或者一些接口文档管理平台进行编写,但此类接口文档维护更新比较麻烦,每次接口有变更,需要手动修改接口文档。在实际的工作中,经常会遇到:“前端抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新”。为了解决这个问题,业界推出了一个Swagger框架来管理接口文档,实现接口文档的自动更新。

采用Swagger框架来管理接口文档,常用于在微服务架构设计或者Java的后端服务工程中。这也造成了很多读者误认为Swagger只是Java语言下的一个框架,其实并不是的,Swagger除了能应用在Java语言的工程中,也同时适用于在其它语言下,比如Python。接下来,在本篇文章,介绍的就是基于Python3+Django3下,如何接入Swagger框架,并且实现Swagger接口文档的自动生成。

2. Swagger介绍

Swagger:它是一款RESTFUL接口的文档在线自动生成+功能测试并集规范于一体的工具框架,可用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统源代码作为服务器以同样的速度来更新。当接口有变动时,对应的接口文档也会自动更新生成。

例如:接口测试站点(http://httpbin.org/#/),也是利用Swagger来生成接口文档的。

Swagger优势: 1)Swagger可生成一个具有互动性的API控制台,开发者可快速学习和尝试API 2)Swagger支持不同客户端SDK代码,用于不同平台上(Java、Python、...)的实现 3)Swagger可在不同的平台上从代码注释中自动生成 4)Swagger社区活跃,里面有许多强悍的贡献者

3. Django项目配置

1、在开始之前,我们先创建一个项目操作目录和隔离环境,具体操作如下:

# 创建项目目录
mkdir django_swagger
cd django_swagger# 创建隔离开发环境
python3 -m venv env
source env/bin/activate​​

2、安装django相关库

​​(env) ➜ pip install django
(env) ➜ pip install djangorestframework

3、创建django项目和app

​
# 创建django项目和app
django-admin startproject drf_swagger
cd drf_swagger
django-admin startapp api​

需要注意的是,本篇文章示例,是基于Python3及Django当前最新库来进行的。

​
(env) ➜  pip list | grep django
Django               3.0.1
django-crispy-forms  1.8.1
django-formtools     2.2
django-import-export 2.0
django-reversion     3.0.5
djangorestframework  3.11.0

到此,我们已经准备好了django基础环境和生成好了项目结构。

4. Django接入Swagger

网上很多资料在介绍Django接入Swagger方法时,都是基于django-rest-swagger库进行讲解的,都殊不知,从2019年6月份开始,官方已经废弃了该库,在django 3.0中已经不支持该库了,取而代之的是全新的第三方drf-yasg库。

GitHub地址:

https://github.com/marcgibbons/django-rest-swagger

所以本文也是基于drf-yasg库来实现在Django3中接入Swagger框架的。

1、安装drf-yasg库

​pip install -U drf-yasg

GitHub项目地址:

https://github.com/axnsan12/drf-yasg

2、修改项目settings.py文件,添加api和drf_yasg。

​
# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','rest_framework','drf_yasg','api',
]​

3、修改api/models.py,此处定义了一个添加接口的model模型(为了方便演示)

​from django.db import modelsclass APIInfo(models.Model):api_name = models.CharField(max_length=32, verbose_name="接口名称", default="请输入接口名称")# 接口描述api_describe = models.TextField(max_length=255, verbose_name="接口描述", default="请输入接口描述")# 接口负责人api_manager = models.CharField(max_length=11, verbose_name="接口负责人", default="请输入接口负责人名字")# 创建时间create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")# 修改时间update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="修改时间")class Meta:db_table = 'api_info'# 设置表名,默认表名是:应用名称_模型类名# 带有应用名的表名太长了verbose_name = '接口列表'verbose_name_plural = "接口列表"def __str__(self):return self.api_name​

4、修改api/admin.py,将model注册到后台,方便在管理后台添加接口记录。

​from django.contrib import admin
from . models import APIInfoadmin.site.register(APIInfo)​

5、新建api/serializers.py文件,代码内容如下:

​from rest_framework import serializers
from api.models import APIInfoclass APIInfoSerializer(serializers.HyperlinkedModelSerializer):class Meta:model = APIInfofields = "__all__"class APISerializer(serializers.ModelSerializer):class Meta:model = APIInfofields = "__all__"​

6、修改api/view.py视图文件,并在类中,添加注释如下所示(为了方便演示):

​
from rest_framework import viewsets
from rest_framework import generics
from . import models
from . import serializersclass APIList(generics.ListAPIView):"""查看接口列表"""queryset = models.APIInfo.objects.all()serializer_class = serializers.APISerializerclass APIDetail(generics.RetrieveAPIView):"""查看接口详细"""queryset = models.APIInfo.objects.all()serializer_class = serializers.APISerializerclass APIDetail(generics.RetrieveUpdateDestroyAPIView):"""更新接口内容"""queryset = models.APIInfo.objects.all()serializer_class = serializers.APISerializerclass APIInfoViewSet(viewsets.ModelViewSet):"""retrieve:返回一组(查)list:返回所有组(查)create:创建新组(增)delete:删除现有的一组(删)partial_update:更新现有组中的一个或多个字段(改:部分更改)update:更新一组(改:全部更改)"""queryset = models.APIInfo.objects.all()serializer_class = serializers.APIInfoSerializer​

7、修改项目url.py文件,进行路由配置。

​
from django.contrib import admin
from django.conf import settings
from django.urls import path,include
from rest_framework import routers, permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapifrom api import viewsrouter = routers.DefaultRouter()
router.register('api_info', views.APIInfoViewSet)schema_view = get_schema_view(openapi.Info(title="测试工程API",default_version='v1.0',description="测试工程接口文档",terms_of_service="https://www.cnblogs.com/jinjiangongzuoshi/",contact=openapi.Contact(email="狂师"),license=openapi.License(name="BSD License"),),public=True,permission_classes=(permissions.AllowAny,),
)urlpatterns = [path('admin/', admin.site.urls),# 配置django-rest-framwork API路由path('api/', include('api.urls')),path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),# 配置drf-yasg路由path('^swagger(?P<format>\.json|\.yaml)$', 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'),]​

5. 执行数据同步、运行

1、上述一切配置完成后,开始进行数据库迁移、同步。

​​# 生成迁文件、执行同步
python manage.py makemigrations
python manage.py migrate​

2、创建后台管理员用户

代码语言:javascript

复制

python manage.py createsuperuser

3、运行服务

​python manage.py runserver

6. 验证效果

1、服务运行起来后,默认端口为8000,浏览器访问http://127.0.0.1:8000/redoc/,可查看redoc ui,效果如下所示。

2、点击左侧的api,展开各接口详细如下所示。

PS: ReDoc 是另一个 Swagger UI 工具。

3、继续访问http://127.0.0.1:8000/swagger,即可看到日常我们熟悉的Swagger接口文档界面了。

4、Swagger除了可以即时生成接口文档以外,还可以用于在线做一些接口功能测试,如下所示。

5、在Swagger中还可以查看到在model定义的各字段类型及参数说明。

到此,我们Django3接入Swagger已经完成了,更多swagger的功能使用请读者自行尝试。

本次分享到此结束,感谢大家的阅读!

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

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

相关文章

windows启动Docker闪退Docker desktop stopped

Windows启动Docker闪退-Docker desktop stopped 电脑上很早就安装有Docker了&#xff0c;但是有一段时间都没有启动了&#xff0c;今天想启动启动不起来了&#xff0c;打开没几秒就闪退&#xff0c;记录一下解决方案。仅供参考 首先&#xff0c;参照其他解决方案&#xff0c;本…

论文速览 | CVPR 2022 | Autofocus for Event Cameras | 首个事件相机自动对焦算法:让事件相机在黑暗中也能清晰成像

论文速览 | CVPR 2022 | Autofocus for Event Cameras | 首个事件相机自动对焦算法:让事件相机在黑暗中也能清晰成像 项目主页: https://eleboss.github.io/eaf_webpage/ 1 引言 在计算机视觉和机器人领域,事件相机因其高动态范围和低延迟的特性而备受关注。然而,事件相机的…

C++基础(六):类和对象(中-1)

上一篇博客&#xff0c;我们进入了面向对象的学习&#xff0c;知道了如何设计类&#xff0c;如何创建使用对象&#xff0c;这一篇博客我们再一次深入学习&#xff0c;这一节是类和对象的重点&#xff0c;其中的逻辑比较强&#xff0c;我们要深刻理解&#xff0c;消化&#xff0…

加密的三种方式(摘要加密、对称加密、非对称加密)

摘要加密 md5&#xff0c;sha1&#xff0c;sha256&#xff08;固定算法加密&#xff09; 摘要主要就是哈希值&#xff0c;通过我们的散列的算法。摘要的概念主要是验证完整性和唯一性&#xff0c;不管我们的密码是多长啊&#xff0c;或者多复杂的啊&#xff0c;得到的值都是固…

兴业小课堂|什么是法拍房助拍机构?如何挑选靠谱的助拍机构?

随着法拍房市场的不断发展和扩大 使法拍房数量的增加 其交易的复杂性和专业性需求也日益凸显 这促使了专门机构的出现来满足市场需求 法拍房助拍机构存在的原因主要有以下几点&#xff1a; 1.专业知识和经验&#xff1a; 法拍房的交易流程相对复杂&#xff0c;涉及到法律法…

鼠标自动点击器怎么用?鼠标连点器入门教程!

鼠标自动点击器是适用于Windows电脑的自动执行鼠标点击操作的工具&#xff0c;主要用于模拟鼠标点击操作&#xff0c;实现鼠标高速点击的操作。通过模拟鼠标点击&#xff0c;可以在用户设定的位置、频率和次数下自动执行点击动作。 鼠标自动点击器主要的应用场景&#xff1a; …

【电子数据取证】LX-A603互联网取证系统

文章关键词&#xff1a;电子数据取证、网站取证、快速固证 LX-A603可以通过简单的操作步骤&#xff0c;实现在符合规范的情况下自动对网站进行快速镜像、截屏固定、屏幕录像、生成报告等功能。满足了对互联网网站取证的实战化需求&#xff0c;极大提升工作效率。 应用场景1&a…

一个使用率超高的大数据实验室是如何练成的?

厦门大学嘉庚学院“大数据应用实训中心”&#xff08;以下简称“实训中心”&#xff09;自2022年建成以来&#xff0c;已经成为支撑“大数据专业”复合型人才培养的重要支撑&#xff0c;目前实训中心在专业课程实验教学、项目实训、数据分析类双创比赛、毕业设计等方面都有深入…

Ollama:本地大模型运行指南_ollama运行本地模型

Ollama 简介 Ollama 是一个基于 Go 语言开发的可以本地运行大模型的开源框架。 官网&#xff1a;ollama.com/ GitHub 地址&#xff1a;github.com/ollama/olla… Ollama 安装 【一一AGI大模型学习 所有资源获取处一一】 ①人工智能/大模型学习路线 ②AI产品经理入门指南 ③…

使用OpenCV对图像进行三角形检测、颜色识别与距离估算【附代码】

文章目录 前言功能概述必要环境一、代码结构1. 参数定义2. 距离估计3. 颜色转换4. 图像处理函数4.1 读取图像和预处理4.2 轮廓检测4.3 过滤面积并检测三角形4.4 提取边框并计算距离 二、效果展示红色三角形绿色三角形蓝色三角形黄色三角形 三、完整代码获取总结 前言 本文将介…

[C++]——继承 深继承

一、继承概念 (1)、定义 继承(inheritance)机制是面向对象程序设计使代码复用最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能。继承呈现了面向对象程序设计的层次结构&#xff0c;体现了由简单到复杂的认知过程&#xff0c;是类…

科技云报道:人工智能“顶流”齐聚WAIC 2024,他们都做了什么?

科技云报道原创。 一个由智能驱动的未来世界长啥样&#xff1f; 从完成跨海跨城航线的“空中的士”、全无人驾驶汽车、实现奔跑功能的全尺寸通用人形机器人到百度文心一言、讯飞星火、阿里通义千问、华为盘古、商汤日日新等大模型&#xff0c;从智能制造引领的“灯塔工厂”到…

AutoCAD 2022 for Mac/Win版 安装包下载

AutoCAD 2022 是由 Autodesk 开发的一款计算机辅助设计&#xff08;CAD&#xff09;软件。它广泛应用于工程、建筑、制造、动画和媒体娱乐等多个领域。 系统要求&#xff1a; 操作系统&#xff1a;Windows 10 或更高版本。 处理器&#xff1a;Intel 或 AMD 处理器&#xff0c…

Python爬虫康复训练——笔趣阁《神魂至尊》

还是话不多说&#xff0c;很久没写爬虫了&#xff0c;来个bs4康复训练爬虫&#xff0c;正好我最近在看《神魂至尊》&#xff0c;爬个txt文件下来看看 直接上代码 """ 神魂至尊网址-https://www.bqgui.cc/book/1519/ """ import requests from b…

AI大模型对话(上下文)缓存能力

互联网应用中&#xff0c;为了提高数据获取的即时性&#xff0c;产生了各种分布式缓存组件&#xff0c;比如Redis、Memcached等等。 大模型时代&#xff0c;除非是免费模型&#xff0c;否则每次对话都会花费金钱来进行对话&#xff0c;对话是不是也可以参照缓存的做法来提高命…

1014-33SF 同轴连接器

型号简介 1014-33SF是Southwest Microwave的2.92 mm 同轴连接器。这款连接器采用钢制外壳&#xff0c;铍铜触点&#xff0c;并经过金镀处理&#xff0c;以确保良好的导电性和耐腐蚀性。适用于高频微波应用&#xff0c;例如测试设备、通信系统等。 型号特点 频率范围&#xff1…

一文读懂轻量日志收集系统Loki工作原理

Loki 是由 Grafana Labs 开发的日志聚合系统&#xff0c;设计目标是提供一种高效、低成本的日志收集和查询解决方案。与传统的日志系统&#xff08;如 ELK Stack&#xff09;不同&#xff0c;Loki 不会对日志内容进行索引&#xff0c;而是仅对日志的元数据进行索引&#xff0c;…

景区智能厕所系统,打造智能化,人性化公共空间

在智慧旅游的大潮中&#xff0c;景区智能厕所系统正逐渐成为提升公共空间智能化、人性化水平的关键载体。作为智慧城市建设的重要组成部分&#xff0c;智能厕所系统不仅解决了传统公厕存在的诸多问题&#xff0c;更通过科技的力量&#xff0c;为游客创造了更加舒适、便捷的如厕…

Type-C接口快充取电技术的实现

Type-C接口快充取电技术的实现 Type-C接口快充取电技术主要通过USB PD&#xff08;Power Delivery&#xff09;协议实现。这种技术利用了Type-C接口的物理特性和PD协议的智能性&#xff0c;实现了高效、安全、快速的充电过程。具体实现过程如下&#xff1a; 接口连接与检测&a…

适用于Mac和Windows的最佳iPhone恢复软件

本文将指导您选择一款出色的iPhone数据恢复软件来检索您的宝贵数据。 市场上有许多所谓的iPhone恢复程序。各种程序很难选择并选择其中之一。一旦您做出了错误的选择&#xff0c;您的数据就会有风险。 最好的iPhone数据恢复软件应包含以下功能。 1.安全可靠。 2.恢复成功率高…