Python,Flask:如何为所有响应设置响应头

Sae*_*eid 27 python http-headers flask

我想将我的所有http标头响应设置为这样的:

response.headers["X-Frame-Options"] = "SAMEORIGIN"
Run Code Online (Sandbox Code Playgroud)

我检查了这个问题,但它只更改了一个特定控制器的标题.我想在"before_request"函数中更改所有标题,类似于以下逻辑.我怎样才能做到这一点?

@app.before_request
def before_request():
    # response.headers["X-Frame-Options"] = "SAMEORIGIN"
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 51

@app.after_request()钩子中设置标题,此时您有一个响应对象来设置标题:

@app.after_request
def apply_caching(response):
    response.headers["X-Frame-Options"] = "SAMEORIGIN"
    return response
Run Code Online (Sandbox Code Playgroud)

flask.request背景下仍然可用这个钩子运行时,所以你仍然可以改变基于此时的请求的响应.

  • 只是为了补充这一点。您应该使用`@app.before_request`来获取您的标头令牌并检查其有效性..(标头应与javascirpt中的请求一起发送)然后您的请求后您应该更改响应标头 (2认同)

Raf*_*ues 5

@app.after_request() hook对于我的用例来说是不够的。

我的用例如下:我有一个谷歌云功能,我想为所有响应设置 CORS 标头。可能有多个响应,因为我必须验证输入并在出现问题时返回,我必须处理数据并可能在出现故障时提前返回等。所以我创建了一个辅助函数,如下所示:

# Helper function to return a response with status code and CORS headers
def prepare_response(res_object, status_code):
    response = flask.jsonify(res_object)
    response.headers.set('Access-Control-Allow-Origin', '*')
    response.headers.set('Access-Control-Allow-Methods', 'GET, POST')
    return response, status_code
Run Code Online (Sandbox Code Playgroud)

因此,当我想返回一个响应(总是带有 CORS 标头)时,我现在可以调用这个函数并且我不会重复启用 CORS 所需的 response.headers 设置。