2017-08-06 4 views
1

私はWTFormでJinja2でエラーを発生させようとしていますが、url入力が検証されないとエラーが発生しますが、invalide urlを送信すると、 "URLを入力してください"。jinja2を使用してWTFormでエラーを発生

どのように私はデフォルトのポップアップを渡し、カスタムエラーメッセージを追加しますか?ここ

は、メインPYです:

from datetime import datetime 
from flask import Flask, render_template, url_for, request, redirect,flash 
from logging import DEBUG 
from flask_wtf import FlaskForm 
from wtforms import StringField, PasswordField 
from flask.ext.wtf.html5 import URLField 
from wtforms.validators import DataRequired , url 


app = Flask(__name__) 
app.logger.setLevel(DEBUG) 
app.config['SECRET_KEY']='{@\x8d\x90\xbf\x89n\x06%`I\xfa(d\xc2\x0e\xfa\xb7>\x81?\x86\x7f\x1e' 


@app.route('/') 
@app.route('/index') 

def index(): 
    return render_template('base.html') 

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


# HERE IS THE LOGIN FORM 
class Login(FlaskForm): 
    username = StringField('username') 
    password = PasswordField('password') 
    url = URLField('url', validators=[DataRequired(),url()]) 

@app.route('/form', methods=['GET','POST']) 
def form(): 
    form = Login() 
    if form.validate_on_submit(): 
     url = form.url.data 
     return redirect(url_for('index')) 
    return render_template('form.html',form = form) 


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

、ここではテンプレートです:

<!DOCTYPE html> 
<html> 
<head> 
    <title>form</title> 
</head> 
<body> 
<h1>Hello !</h1> 
<form method="POST" action="{{url_for('form')}}"> 
{{ form.hidden_tag() }} 
{{ form.csrf_token }} 
{{ form.username.label }} 
{{ form.username }} 
{{ form.password.label }} 
{{ form.password }} 
{{ form.url.label }} 
{{ form.url }} 
    {% if form.url.errors %} <p> {{error}}</p> {% endif %} 
<button type="submit">Submit</button> 
</form> 
</body> 
</html> 

答えて

1

あなたはデータ型URLFieldを使用しているので、これはHTML5 "URL" の形としてレンダリングされますフィールドタイプ。

enter image description here

お使いのブラウザはこれを認識し、提出されたデータに独自の検証を行います。

enter image description here

あなたはこれを上書きするための方法はありません - それは、ブラウザに組み込まれています。

カスタムエラーメッセージを表示する必要がある場合は、代わりにTextFieldを使用して、独自のURL検証ロジックを提供することができます。

1

フォームdefinationにデフォルトメッセージの代わりに独自のメッセージを追加します。

url = URLField('url', validators=[DataRequired(),url(message="Please enter a valid url (e.g.-http://example.com/)")]) 
関連する問題