Django Swagger接口文档生成
一、概述
引言
简介
Swagger:是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统源代码作为服务器以同样的速度来更新。当接口有变动时,对应的接口文档也会自动更新。
如:接口测试站点(http://httpbin.org/#/),也是利用Swagger来生成接口文档
Swagger优势
2)Swagger可生成客户端SDK代码,用于不同平台上(Java、Python...)的实现
3)Swagger文件可在许多不同的平台上从代码注释中自动生成
4)Swagger有一个强大的社区,里面有许多强悍的贡献者
二、Django接入Swagger
大致步骤
1.安装django-rest-swagger 2.进入到setting.py文件,添加django-rest-swagger应用 3.进入到views.py,将之前定义的UserViewSet和GroupViewset补充注释 4.在urls.py中添加get_schema_view辅助函数 5.启动Django服务,检测Swagger接口文档配置效果
环境说明
python 3.7.3 Django 2.2.4 djangorestframework==3.9.2 django-rest-swagger 2.2.0
安装模块
pip3 install djangorestframework==3.9.2
注意:djangorestframework版本不能高于3.9.2,否则访问/docs/出现以下错误。
Expected a `coreapi.Document` instance
按照网友的意思,Django Swagger模块已经不维护了,只能支持到3.9.2
另外,django版本不能大于3.x。
配置setting.py
使用Pycharm新建一个项目:t_swagger,app名为api
修改t_swagger/settings.py,增加2行
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'api.apps.ApiConfig', 'rest_framework', 'rest_framework_swagger' ]
在swagger/settings.py末尾处,增加Swagger配置
# swagger 配置项 SWAGGER_SETTINGS = { # 基础样式 'SECURITY_DEFINITIONS': { "basic":{ 'type': 'basic' } }, # 如果需要登录才能够查看接口文档, 登录的链接使用restframework自带的. 'LOGIN_URL': 'rest_framework:login', 'LOGOUT_URL': 'rest_framework:logout', # 'DOC_EXPANSION': None, # 'SHOW_REQUEST_HEADERS':True, # 'USE_SESSION_AUTH': True, # 'DOC_EXPANSION': 'list', # 接口文档中方法列表以首字母升序排列 'APIS_SORTER': 'alpha', # 如果支持json提交, 则接口文档中包含json输入框 'JSON_EDITOR': True, # 方法列表字母排序 'OPERATIONS_SORTER': 'alpha', 'VALIDATOR_URL': None, }
配置serializers.py
进入api(应用目录),新建文件serializers.py,内容如下:
# 序列化 from django.contrib.auth.models import User,Group from rest_framework import serializers class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = "__all__" class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = "__all__"
这里是将django自带的2个表,进行序列化。
配置views.py
进入api(应用目录),修改views.py,完整内容如下:
from django.shortcuts import render, HttpResponse from django.contrib.auth.models import User, Group from rest_framework import viewsets from api.serializers import UserSerializer, GroupSerializer # Create your views here. class UserViewSet(viewsets.ModelViewSet): """ retrieve: 返回用户实例 list: 返回所有用户,按最近加入的用户排序 create: 创建新用户 delete: 删除现有用户 partial_update: 更新现有用户上的一个或多个字段 update: 更新用户 """ '''查看,编辑用户的界面''' queryset = User.objects.all().order_by('id') serializer_class = UserSerializer print(serializer_class, type(serializer_class)) class GroupViewSet(viewsets.ModelViewSet): ''' retrieve: 返回组实例 list: 返回按最近加入的组排序的所有组 create: 创建新组 delete: 删除现有组 partial_update: 更新现有组上的一个或多个字段 update: 更新一个组 ''' '''查看,编辑组的界面''' queryset = Group.objects.all() serializer_class = GroupSerializer
注意:这里不需要return,它会返回表数据的。
配置urls.py
修改文件t_swagger/urls.py,完整内容如下:
from django.contrib import admin from django.urls import path,include from rest_framework import routers # 路由配置模块 from api import views # 路由 router = routers.DefaultRouter() router.register(r'users',views.UserViewSet,base_name='user') router.register(r'groups',views.GroupViewSet) # 重要的是如下三行 from rest_framework.schemas import get_schema_view from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer schema_view = get_schema_view(title='Users API', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer]) urlpatterns = [ path('admin/', admin.site.urls), path('',include(router.urls)), path('api-auth/',include('rest_framework.urls',namespace='rest_framework')), path('docs/',schema_view,name='docs'), ]
生成表
python3 manage.py makemigrations
python3 manage.py migrate
创建超级用户
python3 manage.py createsuperuser
注意:密码必须符合复杂性要求。
启动项目
直接使用Pycharm启动即可。
三、访问页面
drf自带的接口UI
http://127.0.0.1:8000/
效果如下:
Swagger UI
http://127.0.0.1:8000/docs/
效果如下:
点击users
点击get-->try it out
点击执行
结果如下:
这里是返回了一条用户表数据,"username": "xiao",就是我新建的超级用户。
点击Authorize
输入新建的超级用户和密码
登录成功后,效果如下:
本文参考链接:
https://www.jianshu.com/p/c53de96f3ff1
https://blog.csdn.net/sinat_41622641/article/details/81636682
https://blog.csdn.net/the_brave/article/details/106138396