IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> swagger python集成 flask篇 -> 正文阅读

[Python知识库]swagger python集成 flask篇

不同于fastapi flask等老框架没有集成swagger需要第三方辅助, 现在列出两个常用的辅助库
提醒自己
系统学习,少看别人博客直接入手官方文档可以少走弯路
系统学习,少看别人博客直接入手官方文档可以少走弯路
系统学习,少看别人博客直接入手官方文档可以少走弯路

flasgger

  • 官方文档
  • 完整示例
    from flask import Flask, jsonify
    from flasgger import Swagger
    
    app = Flask(__name__)
    
    template = {
        "swagger": "2.0",
        "info": {
            "title": "My API",
            "description": "API for my data",
            "contact": {
                "responsibleOrganization": "ME",
                "responsibleDeveloper": "Me",
                "email": "me@me.com",
                "url": "www.me.com",
            },
            "termsOfService": "http://me.com/terms",
            "version": "V2"
        },
        "host": "127.0.0.1:8686",  # overrides localhost:500
        "basePath": "/",  # base bash for blueprint registration
        "schemes": [
            "http",
            "https"
        ],
        "operationId": "getmyData",
        "paths": {
            "/colors/{palette}/": {
                "get": {
                    "tags": [
                        "colors"
                    ],
                    "summary": "Add a new pet to the store",
                    "description": "api test",
                    "operationId": "addPet",
                    "consumes": [
                        "application/json",
                        "application/xml"
                    ],
    
                    "parameters": [
                        {
                            "name": "palette",
                            "in": "path",
                            "type": "string",
                            "description": "palette all/cmyk/rgb",
                            "required": True,
                        },
                        {
                            "name": "tag",
                            "in": "query",
                            "type": "string",
                            "description": "palette all/cmyk/rgb",
                            "required": True,
                        }
    
                    ],
                    "responses": {
                        "405": {
                            "description": "Invalid input"
                        }
                    },
                    "security": [
                        {
                            "petstore_auth": [
                                "write:pets",
                                "read:pets"
                            ]
                        }
                    ]
                }}}
    }
    
    swagger = Swagger(app, template=template)
    
    
    @app.route('/colors/<string:palette>/')
    def colors(palette):
        all_colors = {
            'cmyk': ['cyan', 'magenta', 'yellow', 'black'],
            'rgb': ['red', 'green', 'blue']
        }
        print "palette:", palette
        if palette == 'all':
            result = all_colors
        else:
            result = {palette: all_colors.get(palette)}
    
        return jsonify(result)
    
    
    app.run(debug=True)
    
    
    1. 其中 template 部分可以提配成 json或者 yaml 通过 Swagger 函数的 template_file 参数进行传参;
    2. 详细的配置在 Swagger 官网中非常详细; Swagger官网
    3. 我建议这样配置还有其他方式的配置, 请移步 本节开头的官网
  • 运行后访问: http://127.0.0.1:5000/apidocs
  • 截图
    在这里插入图片描述

flask-restplus

  • 官方文档
  • 完整示例
    from flask import Flask
    from flask_restplus import Api, Resource, fields
    from werkzeug.contrib.fixers import ProxyFix
    
    app = Flask(__name__)
    app.wsgi_app = ProxyFix(app.wsgi_app)
    api = Api(app, version='1.0', title='TodoMVC API',
        description='A simple TodoMVC API',
    )
    
    ns = api.namespace('todosssss', description='TODO operations')
    
    todo = api.model('Todo', {
        'id': fields.Integer(readonly=True, description='The task unique identifier'),
        'task': fields.String(required=True, description='The task details')
    })
    
    
    class TodoDAO(object):
        def __init__(self):
            self.counter = 0
            self.todos = []
    
        def get(self, id):
            for todo in self.todos:
                if todo['id'] == id:
                    return todo
            api.abort(404, "Todo {} doesn't exist".format(id))
    
        def create(self, data):
            todo = data
            todo['id'] = self.counter = self.counter + 1
            self.todos.append(todo)
            return todo
    
        def update(self, id, data):
            todo = self.get(id)
            todo.update(data)
            return todo
    
        def delete(self, id):
            todo = self.get(id)
            self.todos.remove(todo)
    
    
    DAO = TodoDAO()
    DAO.create({'task': 'Build an API'})
    DAO.create({'task': '?????'})
    DAO.create({'task': 'profit!'})
    
    
    @ns.route('/')
    class TodoList(Resource):
        '''Shows a list of all todos, and lets you POST to add new tasks'''
        @ns.doc('list_todos')
        @ns.marshal_list_with(todo)
        def get(self):
            '''List all tasks'''
            return DAO.todos
    
        @ns.doc('create_todo')
        @ns.expect(todo)
        @ns.marshal_with(todo, code=201)
        def post(self):
            '''Create a new task'''
            return DAO.create(api.payload), 201
    
    
    @ns.route('/<int:id>')
    @ns.response(404, 'Todo not found')
    @ns.param('id', 'The task identifier')
    class Todo(Resource):
        '''Show a single todo item and lets you delete them'''
        @ns.doc('get_todo')
        @ns.marshal_with(todo)
        def get(self, id):
            '''Fetch a given resource'''
            return DAO.get(id)
    
        @ns.doc('delete_todo')
        @ns.response(204, 'Todo deleted')
        def delete(self, id):
            '''Delete a task given its identifier'''
            DAO.delete(id)
            return '', 204
    
        @ns.expect(todo)
        @ns.marshal_with(todo)
        def put(self, id):
            '''Update a task given its identifier'''
            return DAO.update(id, api.payload)
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    
  • 运行后访问: http://127.0.0.1:5000/
  • 截图
    在这里插入图片描述

Swagger如何编写配置文件

  • 可以去官方提供的Editor里去边看官方文档边改出自己项目的配置,地址如下
  • Swagger Editor
  • 截图
    在这里插入图片描述
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:26:58  更:2022-02-26 11:28:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:55:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码