フラスコで送信(FlaskForm)をクリックしても何も起こらない

2020-06-30 python flask flask-sqlalchemy flask-wtforms

これは私のコードです(フォームが検証されているかどうかを確認するために変更しました):

ビュー機能:

@app.route('/modi',methods=['GET','POST'])
@login_required
def IssMed():
    form = medis()
    if form.validate_on_submit():
        flash("Ok")
        redirect(url_for('ViewMedicine'))
    return render_template('issuemedicine.html',form=form)

私のforms.py:

class medis(FlaskForm):
    name = StringField("Medicine Name",validators=[Optional()])
    qty = IntegerField("Quantity",validators=[Optional()])
    submit = SubmitField('Issue')

私のhtmlファイル:

{% extends "base.html" %}

{% block content %}

<form method="post">

  {{form.name.label}} {{form.name()}}
  {{form.qty.label()}} {{form.qty()}}
  {{form.submit()}}

</form>
{% endblock %}

私はどこでミスをしたのか判断できません。助けてください:(

Answers

2つのこと。

エラーを印刷していないため、エラーは表示されていません。フォームが送信されていない場合、エラーのリストを印刷することは理にかなっています。これを行うには、さまざまな方法があります。たとえば、各フィールドにエラーを印刷したり、フォームの上部にエラーのリストを印刷したりします。

{% for error_field, error_list in form.errors.items() %}
   <p>Errors on field: {{error_field}}</p>
   <ul>
        {% for error in error_list %}
            <li>{{ error }}</li>
        {% endfor %}
    </ul>
{% endfor %}

第2に、csrfトークンが欠落している可能性が高いです。これをフォームに追加します。

{{ form.csrf_token }}

詳細については、 フォーム検証ドキュメントをご覧ください。

Related