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 开发Activex组件方法
Nov 08 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
python连接MySQL数据库实例分析
May 12 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
python实现扫描日志关键字的示例
Apr 28 Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
TensorFlow tf.nn.conv2d实现卷积的方式
Jan 03 Python
详解python程序中的多任务
Sep 16 Python
python利用tkinter实现图片格式转换的示例
Sep 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
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
详解在Python程序中使用Cookie的教程
2015/04/30 Python
python实现线程池的方法
2015/06/30 Python
python下载微信公众号相关文章
2019/02/26 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
车间主管岗位职责
2013/11/14 职场文书
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
学校食品安全责任书
2015/01/29 职场文书
可怜妈妈观后感
2015/06/09 职场文书
培训简讯范文
2015/07/20 职场文书
同学聚会祝酒词
2015/08/10 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript