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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
python 字典(dict)按键和值排序
Jun 28 Python
python实现人脸识别代码
Nov 08 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
python适合人工智能的理由和优势
Jun 28 Python
Python argparse模块应用实例解析
Nov 15 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
Python开发入门——迭代的基本使用
Sep 03 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 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
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
YII框架常用技巧总结
2019/04/27 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
JQuery球队选择实例
2015/05/18 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
python中int与str互转方法
2018/07/02 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
优秀中专生推荐信
2013/11/17 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
政府个人对照检查材料
2014/08/28 职场文书
八项规定对照检查材料
2014/08/31 职场文书
生产现场禁烟通知
2015/04/23 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android