2017-11-16 21 views
0

ユーザー名が空白の場合はエラーが発生するログインフォームを作成しようとしています。WTForms検証エラーが機能しない

from flask import Flask, render_template 
from flask_wtf import FlaskForm 
from wtforms import StringField, PasswordField, BooleanField 
from wtforms.validators import InputRequired, Email, length, ValidationError 

app = Flask(__name__) 
app.config['SECRET_KEY'] = 'This is a secret' 
class LoginForm(FlaskForm): 
    username = StringField('username', validators=[InputRequired()]) 
    password = PasswordField('password') 

@app.route('/form', methods=['GET','POST']) 
def form(): 
    form=LoginForm() 
    return render_template('form.html', form=form) 


if __name__== '__main__': 
    app.run(debug=True) 

htmlコードは以下の通りです:

<html> 
<title> MY FORM </title> 
<body> 
<form method="POST" action="{{ url_for('form') }}"> 
    {{form.csrf_token}} 
    {{ form.username.label }} 
    {{ form.username }} 
    <ul> 
    {% for error in form.username.errors %} 
    <li style="color: red;">{{ error }} </li> 

    {% endfor %} 
    </ul> 
    {{ form.password }} 
    {{ form.password.label }} 
    <input type="submit" value="Submit"> 

</form> 
</body> 
</html> 

どうやら、forループをスキップし、何もユーザーフィールドがnullである一方、送信ボタンをクリックするには起こりませんされますが、検証されていません

答えて

0

フォームがPOSTメソッドで送信されると仮定すると、フォームデータが送信されている場合はフォームデータを検証する必要があります。フラスコ-WTFそれは本当に簡単ですして:

@app.route('/form', methods=['GET','POST']) 
def check_form(): 
    form = LoginForm() 
    if form.validate_on_submit(): 
     # do something 
     return # something 
    return render_template('form.html', form=form) 

私は多くを読むために約flask-wtf

+0

おかげで、人をご招待いたします。出来た。 :) – Angy

0

formファンクションのすべてのフォーム。関数を編集し、検証行を追加します。エラーが見つかったのは検証の後です。そうしないと、テンプレート内の変数formにエラー属性はありません。また、

@app.route('/form', methods=['GET','POST']) 
def form(): 
    this_form = LoginForm() 
    this_form.validate() 
    return render_template('form.html', form=this_form) 

すでに機能formを命名するので、フォームformを付けないように、次は行う必要があります。フォームの関数名または変数名を変更する必要があります。

こちらがお役に立てば幸いです。