#flask #flask-login
Вопрос:
Мой код таков : routes.py:
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first() # None if invalid
if user is None or not user.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('login'))
login_user(user, remember=form.remember_me.data)
return redirect('dashapp')
print(form.errors)
return render_template('login.html', form=form)
login.html
{% extends "base.html" %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block app_content %}
<h3>Log in</h3>
<div class="row">
<form>
<div class="col-md-4">
{{ wtf.quick_form(form) }}
</div>
</form>
</div>
{% endblock %}
models.py:
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
class User(UserMixin, db.Model):
id = Column(Integer, primary_key=True)
username = Column(String(64), index=True, unique=True)
email = Column(String(120), index=True, unique=True)
password_hash = Column(String(128))
is_admin = Column(Boolean, default=False)
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
при отправке моя форма все еще пуста, поэтому она не прошла form.validate_on_submit().
Я попытался упростить, как вы можете видеть мой код, но он все еще не работает
объект данных формы-имя пользователя:нет, пароль:нет, Отправить:Ложь. Токен CSFR не пуст, так что проблема не в этом.
Пожалуйста, найдите мою форму:
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
password = StringField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember Me')
submit = SubmitField('Log In')
Комментарии:
1. Добавьте также определение вашей формы, чтобы мы могли видеть всю картинку
2. Не работал с quick_form, но я вижу, что вы не должны помещать его в тег <форма>. Может быть, у вас на странице есть две формы
3. @Дмитрий был прав, вам следует удалить
<form>
тег, посмотрите этот пост на Medium betterprogramming.pub/как использовать-колбу-wtforms-faab71d5a0344. это работает . Спасибо
Ответ №1:
мое исправление, удаляющее тег формы: спасибо @Dimitry и @cizario
{% extends "base.html" %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block app_content %}
<h3>Log in</h3>
<div class="row">
<div class="col-md-4">
{{ wtf.quick_form(form) }}
</div>
</div>
{% endblock %}