我有一个基本形式,可以使用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)