WTForms:禁用can上的客户端验证

2024-04-25 14:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我要的其实很简单。我想创建一个包含一些字段和提交取消按钮的表单。我想使用flaskbootstrap的quick_form模板函数来降低模板的开销。我的表格如下:

from flask_wtf import FlaskForm
from wtforms.validators import Required, Length


class SequenceForm(FlaskForm):
    name = StringField('Name:', validators=[Required(), Length(1, 128)])

    # some other fields here

    submit = SubmitField('submit')
    cancel = SubmitField('cancel')

模板:

^{pr2}$

有人会怀疑我想验证并接受submit上的输入值,跳过cancel上的验证。所以我的视图函数看起来和预期的一样。在

@main.route('sequence/', methods=['GET', 'POST'])
def sequence():
    form = SequenceForm()
    if request.method == 'POST':
        if 'submit' in request.form:
            if form.validate_on_submit():
                print(form.duration.data)
        else:
            return redirect(url_for('main.index'))
    return render_template('sequence.html', form=form)

现在,如果按下取消,逻辑上应该没有验证,并且应该进行重定向。但是,我遇到了这样一个问题:由于客户端验证,如果我按submitcancel,我的view函数甚至都不会被调用。在

<input class="form-control" id="name" name="name" required="" type="text" value="">

有没有方法可以禁用WTForms上的客户端验证?在


Tags: 函数namefromimportform模板ifrequired
3条回答

您可以禁止呈现required属性。在

class MyTextInput(wtforms.widgets.TextInput):
    def __call__(self, field, **kwargs):
        kwargs['required'] = False
        return super().__call__(field, **kwargs)

对于Python2,添加如下参数:super(MyTextInput, self)

然后:

^{pr2}$

Required验证器以及替换RequiredDataRequired和{a3}设置了字段的replace标志。此标志用于将required属性添加到字段的HTML表示中。我的解决方法是手动创建验证函数。在

from wtforms.validators import ValidationError

def _required(form, field):
    if not field.raw_data or not field.raw_data[0]:
        raise ValidationError('Field is required')

class SequenceForm(FlaskForm):
    name = StringField('Name:', validators=[_required, Length(1, 128)])

    # some other fields here

    submit = SubmitField('submit')
    cancel = SubmitField('cancel')

这种方式在客户端没有验证,并且确保在每次submitcancel时都调用view函数。在

注意

更简单的解决方案是将InputRequired验证器的子类化并覆盖field\u标志字典。在

^{pr2}$

要禁用客户端表单验证,请将“novalidate”属性添加到模板中的HTML<form>元素:

<form method="POST" novalidate>

相关问题 更多 >