【问题标题】:Is there a shorter/better way to validate request params?是否有更短/更好的方法来验证请求参数?
【发布时间】:2015-09-05 12:25:24
【问题描述】:
我不断重复这样的块来验证请求参数。有没有更短/更好的方法来实现这个?
count = request.args.get('count', DEFAULT_COUNT)
if count:
try:
count = int(count)
except ValueError:
count = DEFAULT_COUNT
【问题讨论】:
标签:
python
validation
python-2.7
flask
werkzeug
【解决方案1】:
是的。 Flask/Werkzeug Request 对象的args 属性是ImmutableMultiDict,它是MultiDict 的子类。 MultiDict.get() 方法接受 type 参数,它完全符合您的要求:
count = request.args.get('count', DEFAULT_COUNT, type=int)
这是文档的相关部分:
get(key, default=None, type=None)
如果请求的数据不存在,则返回默认值。如果提供了type 并且是可调用的,它应该转换值,返回
它或提出ValueError 如果这是不可能的。在这种情况下
函数将返回默认值,就好像没有找到值一样:
>>> d = TypeConversionDict(foo='42', bar='blub')
>>> d.get('foo', type=int)
42
>>> d.get('bar', -1, type=int)
-1