django-rest-swagger的优化使用方法


Posted in Python onAugust 29, 2019

如下所示:

requirements.txt
django==1.10.5

djangorestframework==3.5.3

django-rest-swagger==2.1.1

参考英文文档:

http://django-rest-swagger.readthedocs.io/en/latest/

使用swagger工具结合Django-rest-framework进行restful API的管理以及可视化显示的时候,由于swagger2.1以后不再使用yaml文档描述api,改而使用json描述,虽然swagger有着自动适配url扫描生成文档的能力,可是自动生成的文档并不详细,然而完全通过json文件描述所有的api,工作量比较大,且有的api也不需要详细描述,因而需要自定义api的json描述和自动扫描生成相结合。

实现如下:

swagger_views.py

# -*- coding: utf-8 -*-

import json
from collections import OrderedDict

from openapi_codec import OpenAPICodec
from openapi_codec.encode import generate_swagger_object
from coreapi.compat import force_bytes

from django.conf import settings

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.schemas import SchemaGenerator

from rest_framework_swagger.renderers import (
 SwaggerUIRenderer,
 OpenAPIRenderer
)


class SwaggerSchemaView(APIView):
 renderer_classes = [
  OpenAPIRenderer,
  SwaggerUIRenderer
 ]

 def load_swagger_json(self, doc):
  """
  加载自定义swagger.json文档
  """
  data = generate_swagger_object(doc)
  with open(settings.API_DOC_PATH) as s:
   doc_json = json.load(s, object_pairs_hook=OrderedDict)

  data['paths'].update(doc_json.pop('paths'))
  data.update(doc_json)
  return OpenAPICodec().decode(force_bytes(json.dumps(data)))

 def get(self, request):
  generator = SchemaGenerator(title='后端API文档',
         urlconf='chess_user.urls')
  schema = generator.get_schema(request=request)
  document = self.load_swagger_json(schema)

  return Response(document)

urls.py

from django.conf.urls import url, include
from django.conf.urls.static import static
from .swagger_views import SwaggerSchemaView


urlpatterns = [
 url(r'^api-doc/$', SwaggerSchemaView.as_view(), name='docs'),

settings.py

SWAGGER_SETTINGS = {
 'JSON_EDITOR': True,
 'LOGIN_URL': 'login',
 'LOGOUT_URL': 'logout',
}

API_DOC_PATH = os.path.join(BASE_DIR, "api-doc/swagger.json")

api-doc/swagger.json

{
 "paths": {
  "v1/user/profile/": {
   "get": {
    "tags": [
     "v1"
    ],
    "description": "用户profile\n",
    "responses": {
     "200": {
      "description": "OK",
      "schema": {
       "title": "User",
       "type": "object",
       "properties": {
        "username": {
         "type": "string"
        },
        "email": {
         "type": "string"
        },
        "phone_number": {
         "type": "string"
        }
       }
      }
     }
    }
   }
  }

 }
}

若有bug,欢迎指出!

以上这篇django-rest-swagger的优化使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python将字符串转换成数组的方法
Apr 29 Python
Python输出9*9乘法表的方法
May 25 Python
详解Python pygame安装过程笔记
Jun 05 Python
通过python顺序修改文件名字的方法
Jul 11 Python
python实现图片上添加图片
Nov 26 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
python开发入门——set的使用
Sep 03 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
python3.9.1环境安装的方法(图文)
Feb 02 Python
python实现杨辉三角的几种方法代码实例
Mar 02 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 #Python
python实现最大优先队列
Aug 29 #Python
django连接oracle时setting 配置方法
Aug 29 #Python
python线程的几种创建方式详解
Aug 29 #Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 #Python
python多线程分块读取文件
Aug 29 #Python
用sqlalchemy构建Django连接池的实例
Aug 29 #Python
You might like
Zend公司全球首推PHP认证
2006/10/09 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Tesserocr库的正确安装方式
2018/10/19 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
详解python算法常用技巧与内置库
2020/10/17 Python
Python pip 常用命令汇总
2020/10/19 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
临床医学专业学生的自我评价分享
2013/11/21 职场文书
学习雷锋倡议书
2014/04/15 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
劳模事迹材料范文
2014/12/24 职场文书
工作岗位职责范本
2015/02/15 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
六年级作文之预言作文
2019/10/25 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
Python 如何实现文件自动去重
2021/06/02 Python
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers