有没有办法在@ before.request中设置cookie?

时间:2019-06-27 09:12:50

标签: python python-3.x flask

我希望我的应用程序能够检测用户的语言,以便向他们提供相应的页面。我的想法是使用@ before.request读取Accepted-Languages标头,使其与应用程序支持的语言匹配,并在需要时设置cookie,但是看来最后一步是无法实现的。 这是该代码:

@app.before_request
def before_request_callback():
    if request.cookies.get('lang'):
        pass
    else:
        lang = request.accept_languages.best_match(supported_languages)
        print(lang)
        #I would like to set the cookie here

我考虑过直接在装饰器(resp.set_cookie())中将cookie设置在响应对象中,因此将应用程序中的所有返回值重新格式化为这样

@app.route("/")
def hello():
    resp = make_response(render_template('index.html'))
    return resp

也许能够获取cookie并将其附加到此响应,但是由于响应是在endpoitn函数中随后创建的,所以我也不知道该怎么做。

我还考虑过直接在装饰器中创建响应,但是由于我需要返回条件,所以我不知道那是否可能

1 个答案:

答案 0 :(得分:0)

我认为您在不需要时尝试使用Cookie。如前所述,您只能在响应上设置cookie。您在响应中send the browser cookies,然后在随后的任何请求中将它们重新发送给您。但是它已经向您发送了Accept-Language。因此,在请求上设置Cookie毫无意义。它已经到达,并且已经包含了您所需要的。

不要挂在设置Cookie上,而只是在生成响应时咨询请求,以确保所提供的内容使用适当的语言。

from flask import request

@app.route("/")
def hello():
    lang = request.accept_languages.best_match(supported_languages)
    return render_template(f'{lang}/index.html')