【问题标题】:How to validate integer range in Flask routing (Werkzeug)?如何验证 Flask 路由(Werkzeug)中的整数范围?
【发布时间】:2013-10-05 06:06:00
【问题描述】:

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

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/&lt;int:id(1-300)") 之类的东西(我不知道这样做的确切方法。

我如何满足我的需求?

【问题讨论】:

    标签: python routing flask werkzeug


    【解决方案1】:

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

    来自 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 方法中

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

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

    第二种方式,你可以验证id的范围,做你喜欢的事情来处理不好的请求。

    【讨论】:

    • 这确实有帮助。但是,我希望就正确的方法获得更多建议。即在路由或 get_foo 方法中这样做的理由。
    • @San 抱歉昨天没有看到评论。答案已更新,看看是否有帮助。
    • 我相信我应该让用户知道他做错了什么,而不是仅仅把 404 扔在他的脸上。我会和第二个一起去。但是,我了解了路由中的整数验证。非常感谢。
    猜你喜欢
    • 2019-10-01
    • 2010-09-25
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多