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正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
python实现的希尔排序算法实例
Jul 01 Python
pandas string转dataframe的方法
Apr 11 Python
Python3中的bytes和str类型详解
May 02 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
Python类继承和多态原理解析
Feb 05 Python
利用python在excel中画图的实现方法
Mar 17 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
2021年最新用于图像处理的Python库总结
Jun 15 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
thinkphp如何获取客户端IP
2015/11/03 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
微信小程序实现吸顶特效
2020/01/08 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
基于python实现对文件进行切分行
2020/04/26 Python
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
校园网站的创业计划书范文
2013/12/30 职场文书
优秀交警事迹材料
2014/01/26 职场文书
小学新教师个人总结
2015/02/05 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
AJAX学习笔记
2021/05/18 Javascript
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python