Flask-RESTful API 开发实战:从安装到参数解析详解
本文详细介绍如何使用 Flask-RESTful 扩展快速构建 RESTful API。内容涵盖环境安装、完整代码示例及核心概念解析,重点讲解 Resource 类的定义与 HTTP 方法映射。同时深入剖析 reqparse 模块的用法,包括基础参数获取、必填项校验及多值处理(action='append'),帮助开发者高效实现接口规范与数据验证。
Flask-RESTful 是 Flask 框架的一个扩展库,旨在简化 RESTful API 接口的创建过程。借助该扩展,开发者能够以极低的成本和高效率构建符合 REST 架构风格的 Web 服务应用。
1、安装
pip install flask_restful
2、全部代码
from flask import Flask
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
TODOS = {
'todo1': {'task': 'build'},
'todo2': {'task': 'bui2'},
'todo3': {'task': 'bui3'}
}
parser = reqparse.RequestParser()
parser.add_argument('task')
class Todo(Resource):
def get(self, todo_id):
return TODOS[todo_id]
def delete(self, todo_id):
del TODOS[todo_id]
return '', 204
def put(self, todo_id):
args = parser.parse_args()
task = {'task': args['task']}
TODOS[todo_id] = task
return task, 201
class TodoList(Resource):
def get(self):
return TODOS
api.add_resource(TodoList, '/todos')
api.add_resource(Todo, '/todos/<todo_id>')
if __name__ == '__main__':
app.run(debug=True)
3、代码说明
1). 初始化
在程序启动阶段,需要实例化一个 Flask-RESTful 的 Api 对象,并将其绑定到 Flask 应用实例上,从而启用 RESTful 路由功能。
api = Api(app)
2). 定义资源类
资源类是 RESTful 接口的核心实现单元,必须继承自 Resource 基类。在子类中,可以定义 get、post、put、delete 等 HTTP 方法,以对应 RESTful 规范中的各种操作语义。
class Todo(Resource):
def get(self, todo_id):
return TODOS[todo_id]
def delete(self, todo_id):
del TODOS[todo_id]
return '', 204
def put(self, todo_id):
args = parser.parse_args()
task = {'task': args['task']}
TODOS[todo_id] = task
return task, 201
3). 参数解析
尽管 Flask 原生提供了访问请求数据的方法,但处理复杂的表单或 JSON 数据时较为繁琐。Flask-RESTful 提供了 reqparse 模块,其设计思路类似于 argparse,旨在简化请求参数的获取与验证流程。
首先通过 reqparse.RequestParser() 创建解析器实例。该解析器能够从 flask.Request.values(表单数据)或 flask.Request.json(JSON 数据)中提取指定字段。此处创建了一个名为 parser 的解析对象。
使用 parser.add_argument('task') 向解析器注册需要关注的参数。每个 add_argument 调用对应一个具体的请求参数或选项,用于定义该参数的名称及基本属性。
在业务逻辑中调用 parser.parse_args() 执行解析。若解析成功,即可通过返回的字典对象获取对应的参数值;若解析失败(如缺少必填参数),框架会自动返回 400 错误响应。
4). add_argument扩展
对于必须提供的参数,可以在 add_argument 中设置 required=True 属性。若请求中缺失该参数,解析器将自动报错,无需手动检查。
parser.add_argument('name', type=str, required=True,
help="Name cannot be blank!")
若需接收多个同名参数(例如数组或列表),可设置 action='append'。此时,解析器会将所有同名参数值收集到一个列表中。
parser.add_argument('name', type=str, action='append')
使用示例:
curl http://api.example.com -d "Name=bob" -d "Name=sue" -d "Name=joe"
获取的参数为:
args = parser.parse_args() args['name'] # ['bob', 'sue', 'joe']
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













