fix(qrgen): fix "trim spaces" checkbox hold state over submits

Only use submitted data to populate form when in POST handler.
Otherwise default value for Boolean field gets clobbered.
This commit is contained in:
2022-02-15 13:28:49 +01:00
parent 81294de6d4
commit 84abf2705b
2 changed files with 6 additions and 9 deletions

View File

@@ -13,23 +13,20 @@ app.config['SECRET_KEY'] = os.urandom(40)
class QRForm(FlaskForm): class QRForm(FlaskForm):
user_data = TextField("Dane:", validators=[DataRequired()]) user_data = TextField("Dane:", validators=[DataRequired()])
# setting default here doesn't work, so we cannot retain checkbox state over POST trim_spaces = BooleanField("Usuń spacje", default=True)
# we force trim_spaced to be checked in the template
# see https://github.com/wtforms/flask-wtf/issues/489 https://github.com/wtforms/flask-wtf/issues/362
# https://github.com/wtforms/flask-wtf/issues/464
trim_spaces = BooleanField("Usuń spacje")
submit = SubmitField("Generuj") submit = SubmitField("Generuj")
@app.route("/", methods=["GET", "POST"]) @app.route("/", methods=["GET", "POST"])
def main(): def main():
form = QRForm(request.form)
if request.method == "POST": if request.method == "POST":
form = QRForm(request.form)
data = request.form["user_data"] data = request.form["user_data"]
if "trim_spaces" in request.form and request.form["trim_spaces"] == "y": if "trim_spaces" in request.form:
data = data.replace(" ", "") data = data.replace(" ", "")
else: else:
# not POST? get back to ourselves # not POST? get back to ourselves, start with empty form
form = QRForm()
data = request.url_root data = request.url_root
return render_template("main.html", form=form, data=data, genurl="/render/") return render_template("main.html", form=form, data=data, genurl="/render/")

View File

@@ -15,7 +15,7 @@
<div> {{ form.user_data }} </div> <div> {{ form.user_data }} </div>
<div class="input submit"> <div class="input submit">
{{ form.trim_spaces(checked=True) }} {{ form.trim_spaces.label }} {{ form.trim_spaces }} {{ form.trim_spaces.label }}
{{ form.submit }} </div> {{ form.submit }} </div>
</form> </form>
</p> </p>