【问题标题】:Prevent input type url default behavior using Flask使用 Flask 防止输入类型 url 默认行为
【发布时间】:2016-08-14 19:27:55
【问题描述】:

我在表单中有输入类型 url,我试图在同一页面中获取验证错误列表,但我希望表单首先将数据发送到服务器,然后呈现错误列表,但是当输入类型为设置为 url 并输入一些其他文本 它显示一个弹出窗口并说 Enter valid 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>

【问题讨论】:

    标签: python validation flask forms wtforms


    【解决方案1】:

    它依赖于 HTML5 的浏览器支持,它会导致客户端验证并阻止数据传递到服务器。您可以通过在表单中​​添加标签 novalidate 来克服 HTML5 URL 字段的默认行为。

    您的模板将如下所示

    <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>
    

    【讨论】:

    • 这确实有效,但我的 Flask 方面缺少什么代码?
    • 根据我对 Flask 的了解,您的代码似乎没有遗漏什么(我可能错了)。此标记仅在客户端添加,因此浏览器会跳过这些字段具有的内置验证。
    • 我正在学习烧瓶,所以如果我没有收到更好的答案,我会接受它,谢谢
    猜你喜欢
    • 2021-12-02
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多