python - Flask-Security,多语言页面的动态 url 前缀(使用 Flask-Babelex)
问题描述
我正在将 Flask-Babelex 添加到我的网站。我使用 url_prefix 注册蓝图,如下所示:
from app.main import bp as main_bp
app.register_blueprint(main_bp, url_prefix="/<lang_code>")
我设置 babel.localeselector 如下:
@babel.localeselector
def get_locale():
if not g.get('lang_code', None):
g.lang_code = request.accept_languages.best_match(app.config['LANGUAGES'])
return g.lang_code
然后在相应蓝图的 routes.py 文件中添加:
@bp.url_defaults
def add_language_code(endpoint, values):
values.setdefault('lang_code', g.lang_code)
@bp.url_value_preprocessor
def pull_lang_code(endpoint, values):
g.lang_code = values.pop('lang_code')
基本上,我正在关注这里所做的事情,并且运行良好。我似乎无法实现的是强制 Flask-Security-Too 使用这个变量 url_prefix。
如果我不更改烧瓶安全配置中的任何内容并访问 localhost:5000/change_password 它会向我抛出“UnknownLocaleError: unknown locale 'change_password'”,这是可以理解的。如果我访问 localhost:5000/pl/change_password,我会得到“AttributeError: '_AppCtxGlobals' 对象没有属性 'lang_code'”。
现在我可以将 SECURITY_URL_PREFIX 配置参数设置为“/<lang_code>”,但随后我得到“AttributeError:'_AppCtxGlobals' 对象也没有属性'lang_code'”。
如何将 lang_code 的信息传递给 Flask-Security?
编辑:
配置:
SECURITY_PASSWORD_SALT = os.environ.get("SECURITY_PASSWORD_SALT")
SECURITY_REGISTERABLE = True
SECURITY_CONFIRMABLE = True
SECURITY_CONFIRM_REGISTER_FORM = ExtendedRegisterForm
SECURITY_TRACKABLE = True
SECURITY_CHANGEABLE = True
SECURITY_RECOVERABLE = True
SECURITY_CHANGE_URL = "/change_password"
SECURITY_POST_LOGIN_VIEW = "/dashboard"
SECURITY_POST_CONFIRM_VIEW = "/welcome"
版本:
- Flask-BabelEx==0.9.4
- Flask-Security-Too==3.4.5
解决方案
推荐阅读
- r - 是否有一个函数(最好在 lubridate 中)来获取任何给定年份的周数?
- php - 为什么不使用 PHPMailer 发送电子邮件?
- solr - 日光浴室返回 Solr HTTP 错误:OK (404)
- mongodb - MongoDB 聚合查找不适用于帖子评论
- python - matplotlib 为具有不同颜色的项目添加纯色图例键
- reactjs - 使用 react-intl v2 加载包时出现 React-intl v5 错误
- javascript - React js多个路由文件不起作用
- python - 是否可以使用 csv.DictReader 将 str 转换为 int?
- google-cloud-platform - 将 CloudSQL 实例从公共 IP 转换为私有 IP
- c++ - 在此处编写的新课程功能中需要一些帮助故障排除