2017-08-06 56 views
1

我想在WTForm中的Jinja2中引发一个错误,如果url输入未经过验证,应该引发错误,但是当我提交一个无效url时, “请输入一个网址”。使用jinja2在WTForm中引发错误

如何传递默认弹出窗口并添加自定义错误消息?

这里是主要潘岳:

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

在表单定义中添加您自己的消息,而不是默认消息。

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