如何在Flask路由(Werkzeug)中验证整数范围?

时间:2013-09-29 09:03:29

标签: python routing flask werkzeug

我在烧瓶应用程序中有以下路由

from foo import get_foo

@app.route("/foo/<int:id>")
def foo_id(id):
    return render_template('foo.html', foo = get_foo(id))

Foo的ID可以在1-300之间。我在哪里可以进行此验证?

我可以在get_foo中进行验证。但是,我不确定这是否是最佳做法。我应该在路线定义中过滤它吗?

@app.route("/foo/<int:id(1-300)")之类的东西(我不知道这样做的确切方法。

我如何满足我的需求?

1 个答案:

答案 0 :(得分:11)

Flask使用Werkzeug路由系统,在我检查Werkzeug URL Routing docs之后,我发现可以在路由规则中进行范围控制。

  

来自Werkzeug docs

     

class werkzeug.routing.IntegerConverter(map,fixed_digits = 0,min = None,max = None)

因此,您可以在路径规则中设置关键字参数minmax,如下所示:

@app.route("/foo/<int(min=1, max=300):id>")

如果id超出范围,请求将获得回复404

希望这有帮助。


为评论编辑:

因此范围验证有两个选项

  1. 在路由
  2. 中 {li} in get_foo方法

    我认为选择取决于你自己的情况。

    如上所述,如果404超出范围,第一个选项会立即回复id

    在第二种方式中,您可以验证id的范围,并做一些您喜欢的事情来处理不良请求。