У меня есть простая форма с полем пароля во Flask, у которого должно быть ограниченное количество шансов (10) для правильной отправки. Проблема в том, что, хотя я вычитаю переменную chances
на 1 каждый раз, когда переданное значение неверно, chances
вычитается только один раз (он останавливается на 9), независимо от того, сколько раз я отправляю форму иобновите страницу.
Вот мой маршрут:
@app.route('/administrator-login', methods=['GET','POST'])
def admin_login():
if current_user.is_authenticated:
return redirect('/administrator-logout')
form = AdminLogin()
user = User.query.first()
if form.validate_on_submit():
if user.chances <= 0:
return render_template(url_for('home'))
if user and form.password.data == 'password': # I will hash the actual password later
user.chances = 10
login_user(user)
return redirect('/hack-the-site-here')
elif form.password.data != 'password':
user.chances -= 1
return render_template('admin_login.html', form=form, chances=user.chances)
А вот моя форма:
class AdminLogin(FlaskForm):
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Login')
Файл 'admin_login.html'
<h3>Chances left: {{ chances }}</h3>
<div class="mt-3">
<form method="POST" action="">
{{ form.hidden_tag() }}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Admin Login</legend>
<div class="form-group">
{{ form.password.label(class="form-control-label") }}
{% if form.password.errors %}
{{ form.password(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.password.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.password(class="form-control form-control-lg") }}
{% endif %}
</div>
</fieldset>
<div class="form-group">
{{ form.submit(class="btn btn-outline-info btn-lg") }}
</div>
</form>
</div>
</div>
И это User
класс:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
chances = db.Column(db.Integer)
В базе данных есть только один User
объект, который не должен изменяться. Критика и советы принимаются. Я подозреваю, что это как-то связано с тем, как user.chances
хранится в объекте User. Вам нужна другая информация? Заранее спасибо.