我希望我的应用程序能够检测用户的语言,以便向他们提供相应的页面。我的想法是使用@ 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函数中随后创建的,所以我也不知道该怎么做。
我还考虑过直接在装饰器中创建响应,但是由于我需要返回条件,所以我不知道那是否可能
答案 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')