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

San*_*San 6 python routing werkzeug flask

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

from foo import get_foo

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

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

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

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

我如何满足我的需求?

Leo*_*ung 12

Flask使用Werkzeug路由系统,在检查了Werkzeug URL路由文档后,我发现可以在路由规则中进行范围控制.

来自Werkzeug docs

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

因此,您可以设置关键字参数,min并max在路径规则中设置如下:

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

如果id超出范围,请求将得到响应404.

希望这可以帮助.


编辑评论:

因此范围验证有两种选择

  1. 在路由中
  2. 在get_foo方法中

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

如上所述,404如果id超出范围,第一个选项将立即响应.

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