Python - Flask 默认路由可能吗?

问题描述 投票:0回答:4

在 Cherrypy 中可以这样做:

@cherrypy.expose
def default(self, url, *suburl, **kwarg):
    pass

有相当于烧瓶的吗?

python flask cherrypy
4个回答
67
投票

Flask 的网站上有一段关于 Flask 的“包罗万象”路线的片段。 你可以在这里找到它

装饰器基本上通过链接两个 URL 过滤器来工作。页面上的示例是:

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
    return 'You want path: %s' % path

这会给你:

% curl 127.0.0.1:5000          # Matches the first rule
You want path:  
% curl 127.0.0.1:5000/foo/bar  # Matches the second rule
You want path: foo/bar

9
投票
@app.errorhandler(404)
def handle_404(e):
    # handle all other routes here
    return 'Not Found, but we HANDLED IT'

1
投票

如果您的单页应用程序具有嵌套路由(例如 www.myapp.com/tabs/tab1 - 典型的 Ionic/Angular 路由),您可以像这样扩展相同的逻辑:

@app.route('/', defaults={'path1': '', 'path2': ''})
@app.route('/<path:path1>', defaults={'path2': ''})
@app.route('/<path:path1>/<path:path2>')
def catch_all(path1, path2):
    return app.send_static_file('index.html')

0
投票

以下内容适用于所有请求,包括

PUT
PATCH
和其他闻所未闻的方法,而其他答案则不然

from flask import Flask
from werkzeug.routing import Rule

app = Flask(__name__)


@app.endpoint("catch_all")
def _404(_404):
    return "", 404


app.url_map.add(Rule("/", defaults={"_404": ""}, endpoint="catch_all"))
app.url_map.add(Rule("/<path:_404>", endpoint="catch_all"))

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080, debug=True)
© www.soinside.com 2019 - 2024. All rights reserved.