Найти - Пользователи
Полная версия: Flask-login, или wtforms, делают что-то странное
Начало » Web » Flask-login, или wtforms, делают что-то странное
1 2
Nahtrezer
Имею две вьюхи которые, собственно, говорят сами за себя.
@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(user_email=form.email.data).first()
        if user is not None and user.verify_password(form.password.data):
            login_user(user, form.remember_me.data)
            return redirect(request.args.get('next') or url_for('index'))
        flash('Invalid username or password.')
    return render_template('login.html', form=form)
    
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        user = User(user_name=form.user_name.data,
                    user_email=form.user_email.data,
                    password=form.password.data)
        db.session.add(user)
        flash('You can now login')
        return redirect(request.args.get('next') or url_for('login'))
    return render_template('register.html', form=form)
Проблема такого характера - при отправке данных в форму просходит простой редирект на “/” и всё.
Есть варианты - почему?
Формы сгенерированы при помощи wtforms.
4kpt_III
При отправке каких данных? Registration или Login?
Nahtrezer
Обе отрабатывают одинаково
4kpt_III
Nahtrezer
Проблема такого характера - при отправке данных в форму просходит простой редирект на “/” и всё.

Ну а пользователь залогирован? Проверить можно:

current_user.is_authenticated()

Плюс нужно определить user_loader. Не забыли часом?
Nahtrezer
Записано в models.py

@login_manager.user_loader
def load_user(user_id):
    return User.get_id(user_id)

В index.html
{% block page_content %}
    Hi,
    {% if current_user.is_authenticated() %}
        {{ current_user.user_name }}
    {% else %}
        anonymous
    {% endif %}
{% endblock %}

Который закономерно всегда возвращает anonymous
4kpt_III
Эмм.

@app.login_manager.user_loader
def get_user():
    pass

Ну и не в моделях, конечно
Nahtrezer
Но ведь…
https://flask-login.readthedocs.org/en/0.2.11/#how-it-works

В любом случае, не помогло
PS: А pass внутри - это так надо, или там нужно было что-то умное вместо неё написать?
4kpt_III
Nahtrezer
PS: А pass внутри - это так надо, или там нужно было что-то умное вместо неё написать?

Получение пользователя по id, естественно
Nahtrezer
Добавил в __init__.py
@app.login_manager.user_loader
def get_user(user_id):
    return User.get_id(user_id)
Воз и ныне там.
4kpt_III
А оно хоть выполняется. Пропринтуйте в местах скрипта. Увидите где поломалось. Если сегодня не найдете, я завтра проверю. Просто я использую classy и у меня там все по-другому построено

P.S. Не забудьте, что объект уже должен существовать в БД! Предварительно создайте объект и запхните в БД, чтобы быть уверенным, что он есть. Или используйте .one() чтобы увидеть ошибку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB