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实现数通设备tftp备份配置文件示例
Apr 02 Python
六个窍门助你提高Python运行效率
Jun 09 Python
Python使用wxPython实现计算器
Jan 30 Python
python中正则表达式的使用方法
Feb 25 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
Python调用C++,通过Pybind11制作Python接口
Oct 16 Python
简单了解Python matplotlib线的属性
Jun 29 Python
Python读取xlsx文件的实现方法
Jul 04 Python
如何基于python操作json文件获取内容
Dec 24 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
推荐一篇入门级的Class文章
2007/03/19 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Python中的pprint折腾记
2015/01/21 Python
Python创建xml的方法
2015/03/10 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
智能旅行箱:Horizn Studios
2018/04/30 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
光声世纪笔试题目
2012/08/25 面试题
追悼会主持词
2014/03/20 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
员工生日会策划方案
2014/06/14 职场文书
档案接收函格式
2015/01/30 职场文书
民事上诉状范文
2015/05/22 职场文书
Python Socket编程详解
2021/04/25 Python
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
JAVA springCloud项目搭建流程
2022/05/11 Java/Android
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL