验证失败一次后,烧瓶表单将无法验证

时间:2020-10-16 18:30:26

标签: python flask flask-wtforms wtforms

我有一个基本形式,可以使用flask validate()方法进行验证。

如果完全正确地填写表格并提交,就可以了。

如果我填写了一部分内容,然后单击“提交”,则会启动验证并突出显示错误。

问题在于,即使更正了错误,提交按钮也不再起作用。 我也有自定义验证功能。 代码如下。

这可能是什么问题?

这是我的表单定义。

import sys
sys.dont_write_bytecode = True

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, SelectField, IntegerField
from wtforms.validators import DataRequired, optional, StopValidation

def myvalidation(form,field):
    a = form.price_select.data != 'F'
    b = field.data is None
    if a and b:
        print(field.errors)
        raise StopValidation()

class search_item(FlaskForm):
    brand = StringField('product brand',validators = [optional()])
    item = StringField('product title', validators=[DataRequired()])
    price_select = SelectField('under or above', choices=[('F','under or above'),('D','under'),('E','above')])
    price = IntegerField(validators=[myvalidation, optional()])
    search = SubmitField('search')

这是我的视图功能。

def given():
    if session.get('default') is None:
        print('check1')
        form = search_item(price_select = 'F')
    elif (session['default'] == 'F'):
        print('check2')
        form = search_item(price_select = 'F',brand=session['errname0'],item=session['errname1'],price=session['errname2'])
    elif session['default'] != 'F':
        print('check3')
        form = search_item(price_select= session['default'],brand=session['errname0'],item=session['errname1'],price=session['errname2'])
    print(form.item.data)
    print(form.validate_on_submit())
    if request.method == 'POST' and form.validate():
        print('check4')
        session.clear()
        session['comp'] = re.sub("[^a-z0-9 ]+", '', form.brand.data.strip().lower())
        session['product'] = re.sub("[^a-z0-9 ]+", '', form.item.data.strip().lower())
        if form.price.data is not None:
            session['price_select'] = form.price_select.data
            session['cost'] = form.price.data
        return redirect(url_for('result'))
    elif request.method == 'POST':
        print('check5')
        session['err'] = form.item.errors
        session['errname0'] = form.brand.data
        session['errname1'] = form.item.data
        session['errname2'] = form.price.data
        session['err2'] = form.price.errors
        session['default'] = form.price_select.data
        return redirect(url_for('given'))
    if session.get('err') is not None and session.get('err2') is not None:
        print('check6')
        fault = []
        if len(session['err']) != 0:
            fault1 = session['err'][0]
            fault.append(fault1)
        else:
            fault.append('')
        if len(session['err2']) != 0:
            fault2 = session['err2'][0]
            fault.append(fault2)
        else:
            fault.append('')
        session.clear()
        return render_template('find.html', form=form, err=fault)
    else:
        print('check7')
        return render_template('find.html', form=form)

0 个答案:

没有答案