使用Flask

时间:2016-08-14 19:27:56

标签: python validation flask html-form wtforms

我在表单中输入了类型url并且我试图在同一页面中获取验证错误列表,但我希望表单首先将数据发送到服务器然后呈现错误列表但是当输入类型是设置为url,然后输入其他文本它显示一个弹出窗口并说输入有效的Url 它在将任何数据发送到服务器之前在客户端执行此操作 我可以将它与js和preventDefault一起使用但是如何使用Flask

克服这种默认行为

这是我的代码

from flask_wtf import Form
from wtforms.fields import StringField
from flask.ext.wtf.html5 import URLField
from wtforms.validators import DataRequired, url

class BookmarkForm(Form):
    url = URLField('url', validators = [DataRequired(), url()])
    description = StringField('description')

主py文件

@app.route('/add', methods = ['GET', 'POST'])
def add():
    form = BookmarkForm()
    if form.validate_on_submit():
        url = form.url.data
        description = form.description.data
        store_bookmark(url, description)
        flash('stored "{}"'.format(description))
        return redirect(url_for('index'))
    return render_template('add.html', form = form)

和模板

<form id='addUrl' action='' method='post' 
{% if form.url.errors %} class ='error'
{% endif %}>
    {{ form.hidden_tag() }}
    <p>Please enter your bookmark here</p>
    {{ form.url(size = 50) }}
    <p>Please enter additional description</p>
    {{ form.description(size = 50) }}
    <ul>
         {% for error in form.url.errors %}
            <li>{{ error }}</li>
         {% endfor %}
    </ul>
    <button type='submit'>Submit</button>
 </form>

1 个答案:

答案 0 :(得分:0)

这取决于HTML5的浏览器支持,它会导致客户端验证并阻止数据传递到服务器。您可以通过向表单添加标记novalidate来克服HTML5网址字段的默认行为。

您的模板将如下所示

<form id='addUrl' action='' method='post' novalidate
{% if form.url.errors %} class ='error'
{% endif %}>
    {{ form.hidden_tag() }}
    <p>Please enter your bookmark here</p>
    {{ form.url(size = 50) }}
    <p>Please enter additional description</p>
    {{ form.description(size = 50) }}
    {# <input type='text' name='url' required> #}
    <ul>
         {% for error in form.url.errors %}
            <li>{{ error }}</li>
         {% endfor %}
    </ul>
    <button type='submit'>Submit</button>
 </form>