【问题标题】:Flask app route for paths that start with X [duplicate]以 X 开头的路径的 Flask 应用程序路由 [重复]
【发布时间】:2018-03-28 19:26:50
【问题描述】:

我是 Flaskpython 的初学者。我想为以“/favicon”开头的路径创建一个处理函数。例如应处理以下内容:

  • /网站图标
  • /faviconFOO
  • /favicon_bar
  • /favicon/buzz
  • /favicon1337

以下情况不应处理:

  • /favico
  • /favicoN
  • /随便

如果 Flask 支持通配符,它​​将是“/favicon*”

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

我该怎么做?

【问题讨论】:

  • 你希望所有路由:faviconfaviconFOOfavicon_bar 等都指向同一个句柄,那么你可以看看这个thread
  • 是的。如果它是通配符,它​​将是 /favicon*
  • 我不会说它是重复的,因为它比其他问题更特别。此外,我不在乎它是否使用正则表达式解决。
  • 可以用正则表达式完美解决,我想这将是在这种情况下减少冗余的最佳方法(烧瓶)。但是 Django 框架对正则表达式的支持更方便。
  • 如果您找到了另一种方法,请告诉我答案是否符合您的要求。

标签: python python-3.x flask path app-route


【解决方案1】:

我会创建一个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'))

你也可以使用string

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

但使用 string 不会捕获 / 字符串。因此,如果使用字符串,则包含 favicon/buzz 之类的 url's 不会被它缓存,另一方面,path 也会捕获 /。所以你应该选择第一个选项。

您可以查看烧瓶站点中的routing 文档。而你 should 创建一个比 if x in Y 更好的条件,因为如果你通过了类似 /thingfavicon 的东西,它会失败

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2011-11-22
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多