Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2017 16:51:28

druidich92
Зарегистрирован: 2016-03-05
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

Добрый день
имею форму

 class LoginForm(FlaskForm):
    email = StringField('Email', validators=[Required(), Length(1, 64), Email()])
    password = PasswordField('Password', validators=[Required()])
    remember_me = BooleanField('Keep me logged in')
    submit = SubmitField('Login In')
для этой формы прописываю представление в auth.login
 @auth.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(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('main.index'))
        flash('Invalid user name or password!!')
    return render_template('auth/login.html', form=form)
ну и соотвтетственно сам шаблон
 {% macro render_field(field) %}
    <dt>{{ field.label }}
    <dd>{{ field(**kwargs)|safe }}
        {% if field.errors %}
            <ul class=errors>
                {% for error in field.errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}
    </dd>
{% endmacro %}
        <form method="POST" action="{{ url_for('auth.login') }}">
            {{ render_field(form.email) }}
            {{ render_field(form.password) }}
            {{ render_field(form.remember_me) }}
            <input type="submit" value="login">
        </form>


Но почему когда жму на кнопку “submit” не срабатывает
 if form.validate_on_submit():
и не происходит логин ?

Офлайн

#2 Янв. 12, 2017 17:08:22

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

Так узнайте, что валидатор не устраивает.

 #
if form.validate_on_submit():
    pass
else:
    print(form.errors)

Отредактировано 4kpt_IV (Янв. 12, 2017 17:08:36)

Офлайн

#3 Янв. 12, 2017 18:01:43

druidich92
Зарегистрирован: 2016-03-05
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

4kpt_IV
вот сделал так

 @auth.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        pass
    else:
        print(form.errors)
        user = User.query.filter_by(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('main.index'))
        flash('Invalid user name or password!!')
    return render_template('auth/login.html', form=form)

и стал логинится.

Офлайн

#4 Янв. 12, 2017 18:08:42

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

Блин. Ясен пень, что стали логиниться. Валидатор-то херится…
Что-то с валидацией. Что выдает print(from.errors)?

Ну и какой смысл поля submit в классе формы, если Вы все равно используете html-ный input?

Отредактировано 4kpt_IV (Янв. 12, 2017 18:11:18)

Офлайн

#5 Янв. 12, 2017 18:21:33

druidich92
Зарегистрирован: 2016-03-05
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

4kpt_IV
да html-ышный случайно скопировал, пробовал различные варицации

а

 print(from.errors)
ничего не выдает в плане ошибок



127.0.0.1 - - “POST /auth/login HTTP/1.1” 200 -
* Detected change in ‘D:\\project\\MySite\\app\\auth\\views.py’, reloading
* Restarting with stat
* Debugger is active!
* Debugger pin code: 309-592-972
* Detected change in ‘D:\\project\\MySite\\app\\auth\\views.py’, reloading
* Restarting with stat
* Debugger is active!
* Debugger pin code: 309-592-972
127.0.0.1 - - “POST /auth/login HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/logout HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/login HTTP/1.1” 200 -
127.0.0.1 - - “POST /auth/login HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “POST /auth/login HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/logout HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/login HTTP/1.1” 200 -
127.0.0.1 - - “POST /auth/login HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/logout HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/login HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/register HTTP/1.1” 200 -
127.0.0.1 - - “POST /auth/login HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “POST / HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/logout HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -
127.0.0.1 - - “GET /auth/login HTTP/1.1” 200 -
127.0.0.1 - - “POST /auth/login HTTP/1.1” 302 -
127.0.0.1 - - “GET / HTTP/1.1” 200 -


вот что выдало

Офлайн

#6 Янв. 12, 2017 18:35:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

 HTTP/1.1” 302
Триставторой код, значит редирект сработал. Вероятно, редиректит не туда куда вы хотите, попробуйте сделать редирект на какой-нибудь адрес
 return redirect("http://google.com")



Офлайн

#7 Янв. 12, 2017 18:40:26

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

А если form.error()?
Если не получится, то придется по-полям смотреть.

Отредактировано 4kpt_IV (Янв. 12, 2017 18:41:54)

Офлайн

#8 Янв. 12, 2017 19:16:50

druidich92
Зарегистрирован: 2016-03-05
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

  <div class="page-header">
        <h1>Login</h1>
    </div>
    <div class="col-md-4">
        <form method="POST" class="form">
            {{ form.hidden_tag() }}
            {{ render_field(form.email) }}
            {{ render_field(form.password) }}
            {{ render_field(form.remember_me) }}
            {{ render_field(form.submit) }}
        </form>
    </div>
    <p>
        New user?
        <a href="{{ url_for('auth.register') }}">
            Click here to register
        </a>
    </p>


И все работает

Офлайн

#9 Янв. 12, 2017 20:00:55

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Не работает форма логина на Flask

4kpt_IV
Ну и какой смысл поля submit в классе формы, если Вы все равно используете html-ный input?

Я об этом сразу написал. В объект формы, видимо, не приходило это поле, а она его ждала, как родного.

P.S. Это поле не обязательно, к слову. Оно чаще всего используется для систем автоматического создания формы из объекта.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version