以X开头的路径的Flask应用程序路由

11
我是一个初学者,正在学习Flask和Python。我想为以“/favicon”开头的路径创建一个处理程序函数。例如以下路径应该被处理:
  • /favicon
  • /faviconFOO
  • /favicon_bar
  • /favicon/buzz
  • /favicon1337

以下路径不应该被处理:

  • /favico
  • /favicoN
  • /whatever

如果Flask支持通配符,那么匹配的模式应该是“/favicon*”。

编辑:我不需要正则表达式的支持。

我该如何做?


你想让所有路由:faviconfaviconFOOfavicon_bar等都指向同一个处理程序,那么你可以查看这个线程 - ZdaR
是的,完全正确。如果它是通配符,那么它将是 /favicon*。 - Mr. Developerdude
我不会说这是一个重复的问题,因为它比其他问题更具体。此外,我不在乎它是否使用正则表达式解决。 - Mr. Developerdude
它可以通过正则表达式完美解决,我想这可能是在这种情况下减少冗余的最佳方式(flask)。然而,Django框架对正则表达式有更方便的支持。 - ZdaR
请告诉我答案是否满足您的需求,如果您找到了其他解决方法也请告知。 - senaps
1个回答

19

我会做一个catch-all(捕获所有)的URL,然后尝试从视图内部使用一个wildcard(通配符)与之配合:

@app.route('/<path:text>', methods=['GET', 'POST'])
def all_routes(text):
    if text.startswith('favicon'):
        #do stuff
    else:
        return redirect(url_for('404_error'))

你也可以使用字符串

@app.route('/<string:text>', methods=['GET'])

但是使用string无法捕获斜杠字符串。因此,如果使用string,包含类似于favicon/buzzurl将不会被缓存,而另一方面,path也可以捕获/。所以应该选择第一个选项。

您可以查看Flask网站中路由文档。您应该创建比if x in Y更好的条件语句,因为它会在传递诸如/thingfavicon之类的内容时失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接