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入门学习之字符串与比较运算符
Oct 12 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
python+pyqt实现右下角弹出框
Oct 26 Python
python生成九宫格图片
Nov 19 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
python实现简单成绩录入系统
Sep 19 Python
Python实现直播推流效果
Nov 26 Python
使用python模拟高斯分布例子
Dec 09 Python
python 实现表情识别
Nov 21 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
python实现控制台输出颜色
Mar 02 Python
Python实现批量自动整理文件
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
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
js实现验证码干扰(静态)
2021/02/22 Javascript
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
Python中正则表达式详解
2017/05/17 Python
python万年历实现代码 含运行结果
2017/05/20 Python
浅析使用Python操作文件
2017/07/31 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
python如何快速拼接字符串
2020/10/28 Python
数据库的约束含义
2012/09/09 面试题
Linux的文件类型
2016/07/05 面试题
美术师范毕业生自荐信
2013/11/16 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
高一新生军训方案
2014/05/12 职场文书
2015年度信用社工作总结
2015/05/04 职场文书