app = Flask(__name__, static_url_path='') 是匹配 "/static" 开头的路由,自动变成"/" 吗?

2019-03-25 18:49:03 +08:00
 lisisi

app 设置静态文件路径 static_folder='static',在 static 文件夹中有一个 api.json 文件。

在设置了 app = Flask(__name__, static_url_path='') 之后,匹配到 /static 开头的请求,就把接收到所有的 "/static/api.json" 请求,就自动变成 "/api.json"了?

Application Object

class flask.Flask(import_name, static_url_path=None, static_folder='static', static_host=None, host_matching=False, subdomain_matching=False, template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None)

http://flask.pocoo.org/docs/1.0/api/#flask.Flask

1656 次点击
所在节点    问与答
3 条回复
lisisi
2019-03-25 19:22:00 +08:00
这样不是每个路由请求,都要匹配两次吗?
一次匹配下“/”,看看有没有 api.json,再匹配一次“/static/”,看看有没有 api.json ?
j0hnj
2019-03-25 19:34:03 +08:00
不是很明白你在说什么,但你的理解是不对的。
默认情况下 (static_folder='static', static_url_path=None), Flask 会自动添加一条路由 /static/<path:filename> 到 static 这个 endpoint, 然后交给 Flask.send_static_file 函数处理,所以请求 /staic/api.json 就会返回 static 目录下的 api.json 文件。

如果你设置 static_url_path='', 那么注册的静态文件处理路径就会变成 /<path:filename>, 所以任何不包含 "/" 的请求(因为 path converter 的正则是 "[^/].*?") 都会交给这条正则来处理。
lisisi
2019-03-25 19:43:34 +08:00
@j0hnj 在设置了 app = Flask(__name__, static_url_path='') 之后,请求 /api.json 和 /static/api.json 都能访问到 api.json 这个文件。

所以我理解设置 static_url_path='' 之后,系统对每个路由,都会匹配两次。一次是匹配静态文件 api.json,一次是匹配“ api.json ” 这个要不是静态文件,而是一个真的路由呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/548422

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX