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迭代用法实例教程
Sep 08 Python
Python与R语言的简要对比
Nov 14 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
Django框架实现的分页demo示例
May 25 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
浅析Python OpenCV三种滤镜效果
Apr 11 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 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
建立动态的WML站点(三)
2006/10/09 PHP
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
python getopt 参数处理小示例
2009/06/09 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Django实现文件上传下载功能
2019/10/06 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
python字典的值可以修改吗
2020/06/29 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
高校教师思想汇报
2014/01/11 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
竞聘演讲稿
2014/04/24 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB
SQLServer常见数学函数梳理总结
2022/08/05 MySQL