在我的flask api应用程序中,我想验证客户端发送的哈希值。如果客户端发送错误的哈希,我想立即返回错误消息。 哈希是由客户端和我的应用程序共享的预定义计算生成的。
在下面的示例中,它实例化了Controller
类,返回new_configuration
的结果。
在不使用每个方法的if语句的情况下,以干净,优雅和集中的方式验证哈希(考虑到我有多个这样的方法)的最佳方法是什么?
@app.route('/newRegistration', methods=['POST'])
def new_registration():
controller = Controller()
return jsonify(controller.new_configuration(request.json))
注意:我的所有路由方法都调用Controller
类。
答案 0 :(得分:0)
Flask拥有before_request
,after_request
以及更多可以帮助您管理该功能的功能。
使用示例:
# routes that won't be hash validated
PUBLIC_ROUTES = ["/favicon.ico", "/"]
@app.before_request
def validate_hash():
# avoid validating on public routes
for route in PUBLIC_ROUTES:
if route == request.path:
return
hash = g.params.get("hash", None)
# validate hash exists in request
if not hash:
raise BadRequestError("Missing hash")
if hash != DEFAULT_HASH:
raise UnauthorizedError("Hash is invalid")
在每次请求未在PUBLIC_ROUTES
中声明的烧瓶路径之前,将执行该方法,并将尝试验证请求中收到的散列参数
关于您的注释,您可以添加另一个before_request
来启动控制器并使用flask.g
功能将其传递给您的流程中的其他路径。