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 30 Python
详解Python3中的Sequence type的使用
Aug 01 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
Python中的取模运算方法
Nov 10 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
Python 字符串池化的前提
Jul 03 Python
Python类成员继承重写的实现
Sep 16 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
python3访问字典里的值实例方法
Nov 18 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提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
PHP运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
php构造函数实例讲解
2013/11/13 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
php工具型代码之印章抠图
2018/07/18 PHP
JavaScript的public、private和privileged模式
2009/12/28 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
python中urlparse模块介绍与使用示例
2017/11/19 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
python3.4实现邮件发送功能
2018/05/28 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
Python如何解除一个装饰器
2020/08/07 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
大学毕业自我评价
2014/02/02 职场文书
校园安全广播稿
2014/02/08 职场文书
户外宣传策划方案
2014/05/25 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
一起来学习Python的元组和列表
2022/03/13 Python