如何验证Flask应用程序中的URL参数?

时间:2015-04-10 18:39:43

标签: python rest flask

我正在Flask中编写一个RESTful API。我可以通过Request Object访问网址参数。验证给定URL参数的最佳方法是什么?

例如:

/places?zip=97239 # This is a valid filter
/places?foo=bar   # This is not a valid filter, 404 response?

一种解决方案是搜索request.args并将每个条目与一组有效的URL参数进行比较。还有更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

将GET参数放入字典中并使用voluptuous验证它。

例如:

parameters = Schema({
    Required('zip'): Coerce(int),
})

将接受任何带有“zip”键的字典,其值可以强制转换为整数(因此取决于您获取值的方式为1或“1”)。然后,您可以使用以下方法对其进行验证:

parameters(my_get_params)  # should not raise an exception

答案 1 :(得分:2)

除了手动验证外,您还可以使用WTForms,除了帮助您根据指定的模型创建实际表单validates URL / POST parameters automatically之外,还可以使用{{3}}。

这是否更好将取决于您的具体情况。

答案 2 :(得分:1)

您可以使用 flask-parameter-validation 库在 Flask 中进行验证。这很有用,因为它在后台使用 Flask 功能、处理文件/表单并隐式转换查询参数。

对于您的示例,您将执行以下操作:

from flask import Flask
from typing import Optional
from flask_parameter_validation import ValidateParameters, Query

app = Flask(__name__)


@app.route("/places", methods=["GET"])
@ValidateParameters()
def check_places(
        zip: Optional[int] = Query()
     ):
    return "Hello World!"


if __name__ == "__main__":
    app.run()