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 相关文章推荐
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
玩转python爬虫之正则表达式
Feb 17 Python
Python中的descriptor描述器简明使用指南
Jun 02 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
简单了解Django模板的使用
Dec 20 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
python列表,字典,元组简单用法示例
Jul 11 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
深度学习tensorflow基础mnist
Apr 14 Python
Python Pandas 删除列操作
Mar 16 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作的文本留言本的例子(三)
2006/10/09 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
微信小程序之购物车功能
2020/09/23 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
技校个人求职信范文
2014/01/25 职场文书
白酒市场营销方案
2014/02/25 职场文书
教学质量评估实施方案
2014/03/17 职场文书
大学生评语大全
2014/04/18 职场文书
大学生就业自荐书
2014/06/16 职场文书
小学清明节活动总结
2014/07/04 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
2015年度保密工作总结
2015/04/24 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
如何利用React实现图片识别App
2022/02/18 Javascript
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL