Flask-RESTX is a community driven fork of Flask-RESTPlus.
Flask-RESTX is an extension for Flask that adds support for quickly building REST APIs.Flask-RESTX encourages best practices with minimal setup.If you are familiar with Flask, Flask-RESTX should be easy to pick up.It provides a coherent collection of decorators and tools to describe your APIand expose its documentation properly using Swagger.
Flask-RESTX requires Python 2.7 or 3.4+.
Flask and Werkzeug moved to versions 2.0 in March 2020. This caused a breaking change in Flask-RESTX.
RESTX and Flask / Werkzeug CompatibilityFlask-RESTX version | Flask version | Note |
---|---|---|
<= 0.3.0 | < 2.0.0 | unpinned in Flask-RESTX. Pin your projects! |
== 0.4.0 | < 2.0.0 | pinned in Flask-RESTX. |
>= 0.5.0 | All (For Now) | unpinned, import statements wrapped for compatibility |
trunk branch in Github | All (and updated more often) | unpinned, will address issues faster than releases. |
You can install Flask-RESTX with pip:
$ pip install flask-restx
or with easy_install:
$ easy_install flask-restx
With Flask-RESTX, you only import the api instance to route and document your endpoints.
from flask import Flask
from flask_restx import Api, Resource, fields
app = Flask(__name__)
api = Api(app, version='1.0', title='TodoMVC API',
description='A simple TodoMVC API',
)
ns = api.namespace('todos', 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)
Flask-RESTX is brought to you by @python-restx. Since early 2019 @SteadBytes,@a-luna, @j5awry, @ziirish volunteered to help @python-restx keep the project upand running.Of course everyone is welcome to contribute and we will be happy to review yourPR's or answer to your issues.
The documentation is hosted on Read the Docs
Want to contribute! That's awesome! Check out CONTRIBUTING.rst!
前言 flask 注册路由有2种方式,一种是通过@app.route()装饰器来实现,另外一种是通过app.add_url_rule()方法来实现路由注册 路由的注册 在没有使用 Flask-RESTX 框架之前,我们学的第一个hello world 程序是通过@app.route()装饰器来注册的路由 from flask import Flask app = Flask(__name__)
前言 本页介绍了构建一个稍微复杂的 Flask-RESTPlus 应用程序,该应用程序将涵盖在设置实际基于 Flask-RESTPlus 的 API 时的一些最佳实践。 多个namespaces 命名空间 组织 Flask-RESTPlus 应用程序有很多不同的方法,但在这里我们将描述一种可以很好地扩展大型应用程序并保持良好级别组织的方法。 Flask-RESTPlus 提供了一种使用与 Flas
前言 在校验请求参数的时候,除了一些基本的required=True, type类型外,还会遇到一些校验,比如是否为空,字符串长度,以及一些自定义的参数规则。 add_argument 参数 class Argument(object): """ :param name: Either a name or a list of option strings, e.g. foo or
前言 model()工厂允许您将模型实例化并注册到您的API或Namespace. api.model() 工厂 有2种使用方式,第一种直接使用 api.model my_fields = api.model('MyModel', { 'name': fields.String, 'age': fields.Integer(min=0) }) 第二种间接注册到api,以下方式是
前言 Flask-RESTX 接口返回400,405会以JSON格式返回,像400,500返回的是html格式 自定义异常message 内容 Werkzeug HTTPException 会自动正确地重新使用描述属性进行序列化。 from werkzeug.exceptions import BadRequest raise BadRequest() 将返回 400 HTTP 代码并输出 {
前言 兄弟们在做web开发服务的时候我推荐大家使用flask-restx这个插件,对比falsk而言,flask只适合做比较小的微服务组件,而不是一个完成的web应用,且flask-restx集成swagger和restful更方便的管理我们的api服务,使用方法和flask并无太大的差异,下面我们来具体了解flask-restx怎么使用的吧。 环境安装 Flask==2.0.1 flask-re
前言 使用 marshal_with 序列化模型非常方便,还可以处理一些嵌套字段。 嵌套字段 虽然使用 dicts 嵌套字段可以将平面数据对象转换为嵌套响应,但您可以使用它 Nested 来解组嵌套数据结构并适当地呈现它们。 官方文档示例 >>> from flask_restx import fields, marshal >>> import json >>> >>> address_fiel
前言 Flask-RESTX 通过提供每个和它自己的标准 Python实例来扩展Flask 的日志记录。这允许在每个命名空间的基础上分离日志记录,以允许更细粒度的细节和配置。 基本示例 默认情况下,这些记录器从 Flask 应用程序对象记录器继承配置。 import logging import flask from flask_restx import Api, Resource # co
前言 使用 reqparse.RequestParser() 解析器校验请求参数时,如果没传这个参数,解析后会给个None值,导致更新数据的时候非常不方便。 遇到问题 下面代码有3个请求参数,都是非必须的,在更新数据的时候, 期望传什么参数就更新什么参数的内容,没传过来的参数不要给默认值None from flask_restx import Namespace, Resource, reqpar
前言 flask 管理一个大的项目时,可以把项目分为几个不同的应用,通过蓝图来管理。 flask 里面的蓝图 相当于 django 的app。 蓝图基本使用 在视图部分使用蓝图 from flask import Blueprint from flask_restx import Api blueprint = Blueprint('api', __name__) api = Api(bluep
前言 通常我们会为每个资源创建不同的解析器,如果多个解析器直接有共同的参数,可以写一个包含所有共享参数的父解析器。 然后使用copy() 复制一个父类解析器 同一个参数覆盖使用 replace_argument() 完全删除参数校验remove_argument() 继续添加参数add_argument() 解析器继承 基于一个父类解析器 from flask_restx import reqpa
一个完整的flask-restx实例 from flask import Flask from flask_restx import Api, Resource, fields from werkzeug.middleware.proxy_fix import ProxyFix app = Flask(__name__) app.wsgi_app = ProxyFix(app.wsgi_app)
问题内容: 在官方的快速入门中,建议在使用单个 模块 时使用: 2. …如果您使用的是单个模块(如本例所示),则应使用,因为取决于它是作为应用程序启动还是作为模块导入,其名称将有所不同(与实际导入名称不同)。… 但是,在他们的API文档中,当我的应用程序为 软件包 时,建议进行硬编码: 因此,您在此处提供的内容很重要。如果使用单个模块,则始终为正确的值。但是,如果您使用的是包,通常建议在其中硬编码
在前面,我们介绍了 REST Web 服务,并使用 Flask 提供服务。这里,我们使用第三方库 Flask-RESTful,它使得在 Flask 中提供 REST 服务变得更加简单。 安装 使用 pip 安装: $ pip install flask-restful 使用 下面我们主要使用官方文档的例子进行说明。 Hello World 我们先来看一个简单的例子。 # -*- coding: u
Bootstrap 是 Twitter 开源的一个 CSS/HTML 框架,它让 Web 开发变得更加迅速,简单。要想在我们的 Flask 应用中使用 Boostrap,有两种方案可供选择: 第 1 种,在我们的 Jinja 模板中直接引入 Bootstrap 层叠样式表 (CSS) 和 JavaScript 文件,比如 bootstrap.min.css,bootstrap.min.js; 第
在 Web 应用中,我们经常需要保护我们的 api,以避免非法访问。比如,只允许登录成功的用户发表评论等。Flask-HTTPAuth 扩展可以很好地对 HTTP 的请求进行认证,不依赖于 Cookie 和 Session。本文主要介绍两种认证的方式:基于密码和基于令牌 (token)。 安装 使用 pip 安装: $ pip install Flask-HTTPAuth 基于密码的认证 为了简化
假设你的 Web 服务对于某些请求比较耗时,而该请求的返回结果在较短的时间内(比如 5 分钟内)都是足够有效的,这时你能想到什么方法去改善这种状况呢?缓存?对,至少这是一种提高性能的最简单的方法。 Flask 本身不提供缓存功能,但是作为 Flask 核心的 Werkzeug 框架则提供了一个简单的缓存对象 SimpleCache,它将缓存项存放在 Python 解释器的内存中。使用 Simple
MongoDB 是一个文档型数据库,是 NoSQL (not only SQL) 的一种,具有灵活、易扩展等诸多优点,受到许多开发者的青睐。MongoEngine 是一个用来操作 MongoDB 的 ORM 框架,如果你不知道什么是 ORM,可以参考 Flask-SQLAlchemy 一节。在 Flask 中,我们可以直接使用 MongoEngine,也可使用 Flask-MongoEngine