Flask API - 验证哈希请求

时间:2018-05-14 21:31:55

标签: python python-3.x flask

在我的flask api应用程序中,我想验证客户端发送的哈希值。如果客户端发送错误的哈希,我想立即返回错误消息。 哈希是由客户端和我的应用程序共享的预定义计算生成的。

在下面的示例中,它实例化了Controller类,返回new_configuration的结果。

在不使用每个方法的if语句的情况下,以干净,优雅和集中的方式验证哈希(考虑到我有多个这样的方法)的最佳方法是什么?

@app.route('/newRegistration', methods=['POST'])
def new_registration():

    controller = Controller()
    return jsonify(controller.new_configuration(request.json))

注意:我的所有路由方法都调用Controller类。

1 个答案:

答案 0 :(得分:0)

Flask拥有before_requestafter_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功能将其传递给您的流程中的其他路径。