【发布时间】:2023-04-09 22:19:01
【问题描述】:
我有一个简单的表单,在 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 对象中的方式有关。
您还需要其他信息吗?提前致谢。
【问题讨论】:
-
您在数据库中分配给机会的默认值是多少?
-
@ParthS007 10. 这就是它的创建方式。
-
在第二个
if声明中?
标签: python flask flask-sqlalchemy flask-wtforms