我在烧瓶应用程序中有以下路由
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)")
之类的东西(我不知道这样做的确切方法。
我如何满足我的需求?
答案 0 :(得分:11)
Flask使用Werkzeug路由系统,在我检查Werkzeug URL Routing docs之后,我发现可以在路由规则中进行范围控制。
来自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>")
如果id
超出范围,请求将获得回复404
。
希望这有帮助。
为评论编辑:
因此范围验证有两个选项
get_foo
方法
醇>
我认为选择取决于你自己的情况。
如上所述,如果404
超出范围,第一个选项会立即回复id
。
在第二种方式中,您可以验证id
的范围,并做一些您喜欢的事情来处理不良请求。