Flask如何实现RESTful风格API_Python结合Flask-RESTful构建资源类

小敏大大_3564

小敏大大_3564

2026-04-13

1014人浏览

原创

flask-restful非flask内置模块且已进入维护模式,兼容新版flask需用0.3.10版并正确导入from flask_restful import api;常见坑包括移除flask.ext、路由绑定错误、reqparse严格模式缺失及marshal_with序列化异常。

flask如何实现restful风格api_python结合flask-restful构建资源类

Flask-RESTful 不是 Flask 内置模块,也不是现代 Flask(2.3+)推荐的默认方案——它已进入维护模式,官方文档长期未更新,且与新版 Flask 的导入机制、错误处理、异步支持存在兼容问题。如果你只是想快速暴露几个接口,用原生 flask + jsonify 更稳;如果坚持用 Flask-RESTful,必须绕过几个关键坑。

ImportError: No module named 'flask.ext'

这是最常卡住新手的第一步。旧教程里写的 from flask.ext.restful import Api 在 Flask 2.0+ 中彻底失效,因为 flask.ext 命名空间已被移除。

  • 正确导入方式是:from flask_restful import Api, Resource
  • 确保已安装对应版本:pip install Flask-RESTful==0.3.10(这是最后一个兼容 Flask 2.3+ 的稳定版)
  • 不要尝试 pip install flask-restful 不加版本号——最新版 0.3.11 有 reqparse 兼容性 bug,会导致 parser.parse_args() 在空 body 时静默失败

Resource 类中 get/put/post 方法不生效

现象:访问 /users/123 返回 405 METHOD NOT ALLOWED,但代码里明明写了 def get(self, user_id)。

Python Use Agent
Python Use Agent

智能执行Python任务,自动生成、执行代码并反馈结果,无需额外配置,兼容旧命令。

下载
  • 检查 api.add_resource() 是否绑定了正确路径,比如:api.add_resource(UserResource, '/users/<user_id>')</user_id>,注意 <user_id></user_id> 中的类型转换符必须和方法参数名一致
  • 确认类继承的是 flask_restful.Resource,不是 flask.views.View 或其他基类
  • 如果用了蓝图(Blueprint),Api 实例必须绑定到该蓝图,不能直接传 app;否则路由注册失败,资源不可达

reqparse.RequestParser 解析失败却没报错

常见于 POST/PUT 请求体为空或字段名拼错时,parser.parse_args() 返回空字典,而不是抛出异常,导致后续逻辑取不到值。

  • 显式启用严格模式:parser.parse_args(strict=True),这样缺失必填字段会直接返回 400 错误
  • 避免用 type=str 直接接收非字符串字段(如 JSON 数组),应改用 type=list 并配 action='append',或改用 request.get_json() 手动解析
  • location 参数别漏设:表单数据用 location='form',JSON 用 location='json',URL 查询参数用 location='args';默认只查 form 和 args,不查 json

@marshal_with 序列化后字段丢失或类型错乱

比如定义了 resource_fields = {'id': fields.Integer, 'name': fields.String},但返回 JSON 里 id 是字符串、name 消失了。

  • 确保被序列化的对象是字典或具有 __dict__ 的实例;若返回的是 ORM 模型对象,需先调用 model.__dict__ 或用 marshal 函数手动转换
  • fields.DateTime 默认输出为 ISO 格式字符串,但若字段值为 None,会抛 AttributeError;加 allow_null=True 可安全跳过
  • 不要在 @marshal_with 装饰的方法里 return None 或空列表——它不会自动包装成 JSON array,而是触发 500 错误;应显式 return {} 或 [] 并配合 marshal_with 的 envelope 参数调整结构
Flask-RESTful 的核心价值在于快速约定式路由 + 简单参数校验,但它对嵌套资源、异步视图、OpenAPI 文档、中间件链的支持非常弱。真正需要构建生产级 REST API 时,flask-smorest 或直接用 FastAPI 是更可持续的选择。而这里所有“容易踩的坑”,几乎都源于它试图在 Flask 上做一层抽象,却没跟上 Flask 本身的演进节奏。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1651

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4064

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1649

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

23437

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2867

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2907

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1143

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2263

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程