python - 传入 Flask 的可能路径列表?

标签 python api flask routes

我正在学习 Flask 并且有一个关于动态路由的问题:是否可以传入一个可接受的路由列表?我注意到 any 转换器有潜力,但很难找到它的使用示例。基本上我有不同的端点组,它们应该在它们之间触发相同的 Action 。这就是我的意思:

cities = [New York, London, Tokyo]
food = [eggs, bacon, cheese]
actions = [run, walk, jump]

我可以做类似的事情

@app.route('/<string:var>', methods = ['GET'])
def doSomething(var):
    if var in cities:
         travel(var)
    else if var in food:
         eat(var)
    else if var in action:
         perform(var)

但是我有什么办法可以做这样的事情吗?

@app.route('/<any(cities):var>', methods = ['GET'])
    def travel(var):

@app.route('/<any(food):var>', methods = ['GET'])
    def eat(var)

@app.route('/<any(actions):var>', methods = ['GET'])
    def perform(var)

另外,我希望这些列表是动态的。所以我真正想要的是:

cities = myDb.("SELECT cities FROM country")
@app.route('/<any(cities):var>', methods = ['GET'])
    def travel(var):

有什么方法可以实现这一目标,还是我将所有内容都阻塞在一个动态路径中?

最佳答案

Flask 基于 Werkzeug它有 AnyConverter这样做。

基本上它允许你声明一个 Werkzeug规则如下:

Rule('/<any(about, help, imprint, class, "foo,bar"):page_name>')

所以基本上对于 flask 来说,它转化为:

from flask import Flask

app = Flask(__name__)


@app.route("/<any('option1', 'option2'):segment>")
def hello(segment):
    return "Hello {}!".format(segment)

app.run()

或者如果您希望在应用启动时动态生成这些列表:

from flask import Flask

app = Flask(__name__)

options = ['option1', 'option2']


@app.route("/<any({}):segment>".format(str(options)[1:-1]))
def hello(segment):
    return "Hello {}!".format(segment)


app.run()

关于python - 传入 Flask 的可能路径列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43012860/

相关文章:

python - 当字典由两个列表组成时,对 OrderedDicts 使用 pprint

Python Caesar cipher ascii 添加空格

REST API、HTTP 状态代码和结果代码

javascript - 即使设置间隔后 Canvas 也不会更新

python - 用户的管理员(仅限)注册,Flask-Security

python - 逐行读取文件——对磁盘的影响?

python - 在 Python 中使用 tz.localize 将 UTC 日期时间转换为英国日期时间

rest - 验证 REST API 的 HTTP POST 请求正文

php - laravel - 使用请求类或输入类

python - 无法在 Heroku 应用程序上访问 Postgres DB