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

10

我正在使用Flask编写RESTful API。我可以通过Request Object访问URL参数。那么,验证给定的URL参数的最佳方法是什么?

例如:

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

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

谢谢!

3个回答

6

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

例如:

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

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

parameters(my_get_params)  # should not raise an exception

我认为你们中的一些人可能已经在使用marshmallow进行模型序列化,那么为什么不使用同一个包来验证查询参数或请求体呢? - Karishma Sukhwani

2

不需要手动验证,你可以使用WTForms,它可以帮助你创建实际的表单,还可以根据指定的模型自动验证URL / POST参数

是否更好取决于你的具体情况。


2
你可以使用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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接