一起使用Flask-Login和Flask-Babel

时间:2016-07-06 18:29:34

标签: flask flask-login babel

我正在使用Flask构建一个多语言应用程序,并使用Flask-Login进行身份验证。

我的典型观点如下:

@auth.route('/en/login/', endpoint="login_en", methods=['GET', 'POST'])
@auth.route('/es/login/', endpoint="login_es", methods=['GET', 'POST'])
def login():
    ...

虽然我像这样处理语言偏好:

@babel.localeselector
def get_locale():
    """Get user language."""
    if 'static' not in request.path:
        languages = app.config.get('LANGUAGES').keys()
        lang = request.path.rstrip('/').split('/')[-1]
        if lang in languages:
            return lang
        elif request.accept_languages:
            return request.accept_languages.best_match(languages)
        else:
            return 'en'


@app.before_request
def before_request():
    """Store data in session before each request."""
    ...
    g.language = get_locale()

现在,Flask-Login需要一个默认的登录路由,通常设置如下:

login_manager.login_view = "auth.login"

我可以将其设置为默认语言路由(例如auth.login_en),但理想情况下我希望事先处理语言首选项,以便用户获得最适合的登录视图。我想过有一个假视图:

@auth.route('/_login/', methods=['GET'])
def _login():
    return redirect(url_for('auth.login_' + g.language), code=302)

..决定了语言偏好,然后重定向到正确的语言视图,但这似乎有点笨拙。

0 个答案:

没有答案