Совместное использование Flask-Login и Flask-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)

.. который определяет предпочтение языка, а затем перенаправляет на правильное языковое представление, но это кажется немного неуклюжим.


person Darwin Tech    schedule 06.07.2016    source источник
comment
Это может помочь (знаю, спустя 2 года...).   -  person Jofre    schedule 15.08.2018
comment
Я работаю с приложением, которое переведено с помощью flask-babel, и все работает нормально, кроме страницы входа. Я подозреваю, что это как-то связано с flask-login, и ваш вопрос - единственный, который я нашел, который касается успешного использования этих модулей вместе, можете ли вы рассказать мне, как вы заставили их работать? Вот мой вопрос.   -  person arudzinska    schedule 16.08.2018