2017-11-16 33 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 방법으로 전송된다고 가정하면 양식 데이터가 제출 된 경우 유효성을 검사해야합니다. 플라스크 - 태권도 연맹 정말 간단 함께 : 나는 초대

@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 이름을 지정하지 마십시오. 폼의 함수 이름이나 변수 이름을 변경해야합니다.

이 정보가 도움이되기를 바랍니다.