首页 > 解决方案 > Google Cloud Functions 上的 Flask `before_request` 上下文函数

问题描述

我正在尝试在 Google Cloud Functions 上使用 Flask 上下文类和函数。这是我正在尝试做的简单代码:

import time
from flask import request, jsonify, g

@app.before_request
def before_request():
    g.start = time.time()

@app.after_request
def after_request(response):
    if ((response.json) and (response.response) and (200 <= response.status_code < 300)):
        response.json['execution_time'] = time.time() - g.start
        response.set_data(bytes(json.dumps(response.json), 'utf-8'))
    return response

def hello_world(request):
    response = jsonify({"status": "success", "message": "Hello World!"})
    response.status_code = 200
    return response

我试过删除app.并只使用@before_request,但这似乎不起作用。知道这是否受支持吗?

另外,是的,我知道我可以execution_time为每个响应添加一个参数,但是 a) 全局设置它会很好,b)before_requestafter_request函数还有其他用例。

谢谢!

标签: pythonflaskgoogle-cloud-platformgoogle-cloud-functions

解决方案


目前无法在 Cloud Functions 中的函数上下文之外进行操作。Cloud Functions 无权访问底层app.

您可能需要考虑改用Cloud Run,它可以让您定义一个完整的 Flaskapp并使用@app.before_requestand @app.after_request.


推荐阅读