flask 1.x 升级到 3.x 不可能“无缝”,必须改代码:api 废弃(如 flask.json、request.json)、werkzeug 2.1+ 行为变更(request.form 类型泛型化、request.values 删除)、json 处理重构(改用 app.json.provider)、strict_slashes 默认启用、samesite cookie 默认值变为 lax。

Flask 1.x 升级到 3.x 不可能“无缝”,必须改代码
Flask 3.x 删除了大量 1.x 时代遗留的兼容层,flask.ext、flask.json、flask.request.json 的自动解析行为、@app.route 的 methods 默认值等全部变更。所谓“无缝”只存在于小 demo;真实项目至少要处理三类破坏性改动:API 废弃、Werkzeug 版本跃迁、JSON 处理逻辑重构。
废弃的 flask.json 和 request.json 怎么替换
Flask 2.3 起已弃用 flask.json 模块,3.x 彻底移除;同时 request.json 不再自动解析请求体,改为需显式调用 request.get_json()。
-
from flask.json import jsonify→ 改用from flask import jsonify(jsonify已是顶层导出) -
json.dumps()/json.loads()仍可用,但若依赖flask.json.JSONEncoder自定义序列化,需迁移至app.json_encoder或更推荐的app.json.provider(Flask 2.2+ 引入) -
request.json直接访问会返回None,必须写成request.get_json(),且注意它默认不校验Content-Type: application/json,如需严格校验,加参数force=False(默认) + 手动检查request.headers.get("Content-Type")
Werkzeug 2.1+ 导致的 Request 和 Response 行为变化
Flask 3.x 要求 Werkzeug ≥ 2.1,而该版本将 Request.form、Request.args 等从 ImmutableMultiDict 改为 ImmutableMultiDict[str, str] 泛型化类型,且移除了 Request.values(已被弃用多年,3.x 彻底删除)。
- 所有对
request.values的引用必须拆分为request.args或request.form,不能混用 -
request.files.getlist("name")返回List[FileStorage],但旧代码若用list(request.files)遍历 key,行为不变;若用request.files.items(multi=True),需确认是否仍满足多值上传逻辑 - 自定义
Response子类若重写了__call__或依赖内部属性(如_status_code),大概率报AttributeError—— Werkzeug 2.1+ 用self.status_code和self.response替代了旧私有字段
路由注册与蓝图中容易漏掉的 endpoint 冲突和 url_for 失效
Flask 3.x 默认启用 strict_slashes=True,且 url_for 对未注册 endpoint 的报错更早、更硬(不再 fallback 到尝试匹配);同时 app.add_url_rule 若未显式传 endpoint,生成的 endpoint 名会因函数名重复或装饰器嵌套而冲突。
- 检查所有
@app.route("/path/", ...)和@app.route("/path", ...)是否有意图差异;若希望两者等价,统一加strict_slashes=False - 所有
url_for("blueprint_name.view_func")必须确保对应视图函数已通过blueprint.route或app.register_blueprint注册,且未被endpoint=...覆盖导致名字不一致 - 使用
flask routesCLI 命令导出路由表(flask routes > routes.txt),人工核对关键 endpoint 是否存在、是否重复、是否带预期前缀
最常被忽略的是:Werkzeug 2.2+ 修改了 cookie 的 SameSite 默认值(从 None 变为 Lax),若你的前端跨域请求依赖 SameSite=None; Secure,必须显式在 set_cookie 中指定,否则登录态丢失——这个坑不报错,只静默失效。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











