6

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

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)")(我不知道这样做的确切方法。

我如何满足我的需求?

4

1 回答 1

12

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

来自 Werkzeug 文档

类 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. get_foo方法中

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

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

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

于 2013-09-29T09:29:24.940 回答