我正在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参数进行比较。还有更好的方法吗?
谢谢!
答案 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()