我有一个flask应用程序,其调用需要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
由于这段代码在多次调用中重复,我想知道是否可以优雅地将它移到一个decorator中,它的形式如下:
@validate_json
@validate_schema(schema=app.config['activate_schema'])
@app.route('/activate', methods=['POST'])
def activate():
....
问题是request
参数是隐式的:我可以在函数中引用它,但它不是函数的参数。因此,我不确定如何在装饰器中使用它。
如何使用Python decorators实现验证检查?
一个迟来的答案,但你可能正在寻找像棉花糖(烧瓶棉花糖)或烤马蹄糖。
只需在装饰器中使用
request
上下文全局。它在任何请求期间都可用。在应用
@route
decorator之前应用这些decorators;您要注册包装的函数,而不是路由的原始函数:相关问题 更多 >
编程相关推荐