Flask如何匹配所有路由?解决static路径无法捕获问题
解决Flask中catch-all路由无法捕获static路径请求的问题
问题原因
Flask默认会自动注册静态文件的路由规则,且该规则优先级高于你自定义的<path:full_path>通配路由。即便修改static_url_path,内置的静态路由依然存在,会优先匹配以static开头的请求,导致catch_all函数无法触发。
修复方案
直接禁用Flask的静态文件功能,初始化应用时设置static_folder=None,这样Flask就不会注册任何静态文件路由,所有请求都会进入你的通配路由处理:
from flask import Flask from flask import request # 禁用静态文件夹,避免自动注册静态路由 app = Flask(__name__, static_folder=None) @app.route('/<path:full_path>', methods=['GET', 'PUT', 'DELETE', 'POST']) def catch_all(full_path): print(request.url) return request.url if __name__ == "__main__": app.run(port=8080, host='0.0.0.0', ssl_context='adhoc', debug=True)
验证效果
启动应用后访问https://127.0.0.1:8080/static/index.html,请求会被catch_all函数捕获,控制台会打印对应URL,页面同时返回该URL。
补充说明
若后续需要重新启用静态文件功能,只需移除static_folder=None参数,Flask会恢复默认的静态文件路由处理。
内容的提问来源于stack exchange,提问作者user26570422
相关产品推荐
相关产品推荐

