Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Flask-login, или wtforms, делают что-то странное [RSS Feed]

#1 Июнь 22, 2015 22:22:32

Nahtrezer
Зарегистрирован: 2013-09-04
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

Имею две вьюхи которые, собственно, говорят сами за себя.

@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.

Офлайн

#2 Июнь 22, 2015 22:31:03

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

При отправке каких данных? Registration или Login?

Офлайн

#3 Июнь 22, 2015 22:47:29

Nahtrezer
Зарегистрирован: 2013-09-04
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

Обе отрабатывают одинаково

Офлайн

#4 Июнь 22, 2015 22:52:16

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

Nahtrezer
Проблема такого характера - при отправке данных в форму просходит простой редирект на “/” и всё.

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

current_user.is_authenticated()

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

Отредактировано 4kpt_III (Июнь 22, 2015 22:53:01)

Офлайн

#5 Июнь 22, 2015 22:59:11

Nahtrezer
Зарегистрирован: 2013-09-04
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

Записано в 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

Офлайн

#6 Июнь 22, 2015 23:08:35

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

Эмм.

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

Ну и не в моделях, конечно

Отредактировано 4kpt_III (Июнь 22, 2015 23:08:41)

Офлайн

#7 Июнь 22, 2015 23:17:39

Nahtrezer
Зарегистрирован: 2013-09-04
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

Но ведь…
https://flask-login.readthedocs.org/en/0.2.11/#how-it-works

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

Офлайн

#8 Июнь 22, 2015 23:33:31

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

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

Получение пользователя по id, естественно

Офлайн

#9 Июнь 22, 2015 23:50:10

Nahtrezer
Зарегистрирован: 2013-09-04
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

Добавил в __init__.py

@app.login_manager.user_loader
def get_user(user_id):
    return User.get_id(user_id)
Воз и ныне там.

Офлайн

#10 Июнь 22, 2015 23:53:49

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Flask-login, или wtforms, делают что-то странное

А оно хоть выполняется. Пропринтуйте в местах скрипта. Увидите где поломалось. Если сегодня не найдете, я завтра проверю. Просто я использую classy и у меня там все по-другому построено

P.S. Не забудьте, что объект уже должен существовать в БД! Предварительно создайте объект и запхните в БД, чтобы быть уверенным, что он есть. Или используйте .one() чтобы увидеть ошибку.

Отредактировано 4kpt_III (Июнь 23, 2015 00:02:19)

Офлайн

  • Начало
  • » Web
  • » Flask-login, или wtforms, делают что-то странное[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version