问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

django drf_yasg 非restful风格的api怎么在swagger上展示?

发布网友 发布时间:2022-04-25 15:19

我来回答

2个回答

热心网友 时间:2022-04-19 01:39

使用Swagger

  Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。

  在web api 使用swagger可以说非常简单,不需要编写任何代码,完全依赖于插件。具体步骤如下:

  1.新建一个web api项目

  

  2.使用nuget添加Swashbuckle包

  

  3.完成

  没错,就是这么简单!运行项目,转到地址 http://localhost:57700/swagger/ui/index 会看到如下页面,这是默认添加的两个apicontroller:  

  这个时候接口还没有具体的描述信息等,例如我们给ValuesController.Get添加注释描述,在页面上还是没有显示出来。需要按照如下步骤实现:

  1. 在app_start 下 SwaggerConfig 大100行的位置找到 //c.IncludeXmlComments(GetXmlCommentsPath()); 如下注释,改为:c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name)); (注意去掉注释了)

  2. 在SwaggerConfig添加一个方法代码:

1
2
3
4
protected static string GetXmlCommentsPath(string name)
{
return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name);
}
  3. 修改项目生成,在bin下对应的xml文件可以看到具体的描述文档,如下:

  

  重新生成项目,就要可以看到完整的接口描述了。例如我们心中一个TestController如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// <summary>
/// 测试控制器
/// </summary>
public class TestController : ApiController
{
/// <summary>
/// 测试Get方法
/// </summary>
/// <remarks>测试Get方法</remarks>
/// <returns></returns>
[HttpGet]
public string Get()
{
return "Get";
}

/// <summary>
/// 测试Post方法
/// </summary>
/// <param name="name">姓名</param>
/// <param name="age">年龄</param>
/// <remarks>测试Post方法</remarks>
/// <returns></returns>
[HttpPost]
public string Post(string name, int age)
{
return name + age.ToString();
}
}
  生成的页面如下,可以看到接口的描述,点击Try it out 即可调用:

  

三、非依赖代码

  上面的方式依赖于Swashbuckle包,它已经包含了Swagger-UI组件。我们的代码需要引入这个包,实际上也可以不需要在项目中引入,单独部署Swagger,包括Swagger-Ui(api展示) 和 Swagger-Editor(在线编辑器),它需要依赖nodejs环境,所以需要先按照nodejs。部署其实也很简单,例如这是我部署的结果:

  swagger-editor:  

  swagger-ui:

  编辑后只需要将文件保存为json文件,然后拷贝到指定的目录即可。这个部署也非常简单,具体可以参照:

  

热心网友 时间:2022-04-19 02:57

PS: 个人深感python开发者社区氛围比安卓/ios/java差多了。不过,这也许是个机会~

前提: 本人开发环境是mac10.14.4,Python3.7.2

django-rest-swagger vs drf-yasg

百度google各种查询帖子,python中生成自动化API文档绝大部分用的都是django-rest-swagger库,然而此库作者表示在2019-06-04已停止更新,而且此库需要的第三方版本库是:

Django 1.8+
Django REST framework 3.5.1+
Python 2.7, 3.5, 3.6
换句话说,django-rest-swagger并不支持Python3.7的环境,所以本人选择了drf-yasg库,它需要的第三方版本库是:
Django Rest Framework: 3.8, 3.9
Django: 1.11, 2.1, 2.2
Python: 2.7, 3.5, 3.6, 3.7
drf-yasg快速上手

安装

pip install -U drf-yasg
1
1
在settings.py声明app,并将debug设置为true

INSTALLED_APPS = [
...
'drf_yasg',
...
]

DEBUG = True
1
2
3
4
5
6
7
1
2
3
4
5
6
7
在根url.py添加scheme_view

from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
openapi.Info(
title="API文档",
default_version='v1.0.0',
contact=openapi.Contact(name='联系开发者', email="your email"),
),
permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
...
url('swagger', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
踩坑

1. 找不到drf目录下的静态文件

解决方案:测试环境settings.py中的DEBUG设置为true(方便生成api文档), 生产环境设置为False。在python环境中,如果使用drf库生成API文档,需要将DEBUG设置为true,否则找不到静态文件。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年云南292分能考上什么大学? 2024高考多少分能被焦作大学录取 【芍药花茶】芍药花茶的功效与作用 芍药花茶怎样喝 芍药花茶的介绍 芍药花茶的属性和功效 联想拯救者电竞手机Pro评测 植物大战僵尸花园战争有用的激活码发给我,有用我就采纳 亲亲奶爸《亲亲奶爸》歌词 植物大战花园战争激活码只能用一次? 歌词中带有。我的好爸爸。我的好爸爸。儿女怎能舍得让你走,_百度... edge浏览器没声音是怎么回事-edge浏览器没声音解决办法 harbor 怎么部署swagger-ui spring boot整合swagger有什么好处 经血的颜色代表什么? 正常大姨妈是什么颜色 月经有什么颜色几种 身上出现问题时,女性的经血会变成哪四种颜色? 姨妈的颜色透露出4个健康的秘密,你都知道哪些? 来例假时,不同颜色的经血,说明了什么问题? 月经颜色怎么回事 大姨妈来了 血色发暗发黑怎么办 月经血的颜色有几种 iPhone7手机有噪音该怎么维修 iphone7通话杂音怎么办 iphone7Plus手机听筒有杂音怎么办? 日本举办过多少次奥运会 iPhone7 plus接听有杂音是哪里出问题了啊?怎么办啊 你如何看待日本出租奥运足球场馆办婚礼一事? 总是时不时梦见前男友,而他现在却已是别人的,我该怎么解托? iphone7手机打电话为什么一直有杂音?怎么就可以解决 东京奥运会的主场馆居然不安装空调,日本人到底是怎么想的? 会计专硕全日制和非全日制有哪些区别?报名有没有限制? 求助大神,spring boot 整合 swagger 报错 swagger php怎么安装 我有两个springboot项目,配置swagger之后,一个访问swagger需要加上项目名访问,否则404,另一个不需要 专硕是全日制还是非全日制 蜜桃乌龙慕斯怎么做? 蜜桃慕斯蛋糕的做法? 会计专硕全日制研究生和非全日制的区别是什么? 蜜桃乌龙茶自制怎么做? 一般的非全日制的专硕和管理类硕士有什么区别? 在职研究生学硕,专硕,非全日制的区别在哪 蜜桃乌龙奶酪茶登上热搜,这种奶茶是如何制作的? 慕斯是什么做的 怎么做慕斯? 慕斯是什么?怎么做? 蜜瓜慕斯蛋糕有几种做法呢? 夏日消暑饮品,在家可以做哪些? 看到好多做慕斯的啊!不懂慕斯是什么意思啊? 淘宝发布宝贝后,我之后一个星期内,修改了两次,类目和主图顺序,请问对宝贝影响大吗?需要重新发布吗? 蜜桃乌龙炸鸡是怎样做的?