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实现的登录和操作开心网脚本分享
Jul 09 Python
跟老齐学Python之print详解
Sep 28 Python
python判断字符串是否纯数字的方法
Nov 19 Python
Python中实现的RC4算法
Feb 14 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python操作日志的封装方法(两种方法)
May 23 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
详解torch.Tensor的4种乘法
Sep 03 Python
python 如何调用远程接口
Sep 11 Python
pycharm + django跨域无提示的解决方法
Dec 06 Python
pandas统计重复值次数的方法实现
Feb 20 Python
利用Opencv实现图片的油画特效实例
Feb 28 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
实用函数2
2007/11/08 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
连锁经营管理专业大学生求职信
2013/10/30 职场文书
培训专员岗位职责
2014/02/26 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
施工安全协议书范本
2014/09/26 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
小学家长意见怎么写
2015/06/03 职场文书
运动会加油稿
2015/07/22 职场文书