2016-08-14 10 views
0

У меня есть URL-адрес типа ввода в форме, и я пытаюсь получить список ошибок проверки на той же странице, но хочу, чтобы форма сначала отправила данные на сервер, а затем отобразила список ошибок, но когда тип ввода установлен в url, и я ввожу какой-то другой текст. Он показывает всплывающее окно и говорит, что введите действительный Url Он делает это на стороне клиента перед отправкой любых данных на сервер Я могу использовать его с js и preventDefault но как я могу преодолеть это поведение по умолчанию, используя флягуПредотвращать поведение по умолчанию для URL-адреса, используя флажок

Вот мой код

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

главный ого файл

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

ответ

0

Это зависит от поддержки браузера HTML5, и это вызывает проверку на сторону клиента и предотвращает данные, передаются на сервер. Вы можете преодолеть это поведение по умолчанию для поля URL HTML5, добавив в форму форму тега novalidate.

шаблон будет выглядеть следующим образом

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

это на самом деле работает, но то, что мой код отсутствует Колба аспекта? –

+0

Из того, что я знаю о Flask, ваш код, кажется, не пропускает что-то (возможно, я ошибаюсь). Этот тег добавляется только на стороне клиента, поэтому браузеры пропускают встроенные проверки этих полей. – d4vsanchez

+0

Я изучаю колбу, поэтому, если я не получу лучшего ответа, я согласен с этим, спасибо –