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正则表达式 re模块使用说明
May 19 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
使用python实现滑动验证码功能
Aug 05 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
Python2与Python3的区别点整理
Dec 12 Python
python使用正则表达式(Regular Expression)方法超详细
Dec 30 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 Python
python使用smtplib模块发送邮件
Dec 17 Python
如何正确理解python装饰器
Jun 15 Python
详解在OpenCV中如何使用图像像素
Mar 03 Python
Python  lambda匿名函数和三元运算符
Apr 19 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
2006/10/09 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
mouse_on_title.js
2006/08/25 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
深入理解NumPy简明教程---数组2
2016/12/17 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
python 删除非空文件夹的实例
2018/04/26 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python实例化对象的具体方法
2020/06/17 Python
python程序需要编译吗
2020/06/19 Python
Joules美国官网:出色的英国风格
2017/10/30 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
直接有效的自我评价
2014/01/11 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
进口业务员岗位职责
2014/04/06 职场文书
森林防火标语
2014/06/23 职场文书
面试自我评价范文
2014/09/17 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js