【发布时间】:2014-08-05 23:39:57
【问题描述】:
我有一个烧瓶应用程序,其调用需要 JSON 有效负载。在处理每个调用之前,我有一个两步错误检查过程:
- 断言负载是有效的 JSON
- 断言 JSON 负载符合特定架构
以下列方式实现:
@app.route('/activate', methods=['POST'])
def activate():
request_id = request.__hash__()
# Assert that the payload is a valid JSON
try:
input = request.json
except BadRequest, e:
msg = "payload must be a valid json"
return jsonify({"error": msg}), 400
# JSON Schema Validation
try:
validate(request.json, app.config['activate_schema'])
except ValidationError, e:
return jsonify({"error": e.message}), 400
由于这段代码在多次调用中重复,我想知道我是否可以优雅地将其移动到装饰器中,形式为:
@validate_json
@validate_schema(schema=app.config['activate_schema'])
@app.route('/activate', methods=['POST'])
def activate():
....
问题在于request 参数是隐式的:我可以在函数中引用它,但它不是它的参数。因此,我不确定如何在装饰器中使用它。
如何使用 Python 装饰器实现验证检查?
【问题讨论】:
-
我有点希望有一个图书馆可以做到这一点。 @Martijn 的回答非常简单,但有人知道吗?
标签: python flask decorator jsonschema python-decorators