WTForms:了解客户端验证并在需要时绕过它

问题描述

我有几种表格可用于输入数据。 如果不完整(未经验证),我希望能够将数据临时保存到数据库中,以便不必重新输入输入的数据。 我使用标题 WTForms: Submit without validation 阅读了几篇文章https://stackoverflow.com/users/272193/matt-healy 在这文章How can I ignore a field validation in flask-wtf? 建议这样做: [A] 这样做的方法是在模板中添加 formnovalidate=True 。 例如 {{ form.delete_button(class_="...",formnovalidate=True) }}

我喜欢这个想法并想了解这一点。我还想将它包含在输入行的表格中,所以我知道它没有经过验证的原因有很多,包括需要去吃午饭哈哈。

无论如何,我实现了这个:

testChoices.html:

Widget build(BuildContext context) {
  return FutureBuilder(
    future: decodetoken(),builder: (context,snapshot) {
      if (!snapshot.hasData) {
        // Future hasn't completed yet,display something in the meantime
        return CircularProgressIndicator();
      }
      // Future has completed,get data
      var payload = snapshot.data;
      ...
    },);
}

forms.py:

{% extends "base.html" %}
{% block content %}
    <h1>Testing Code Solution</h1>
    <form action="" method="post" novalidate>
        {{ form.hidden_tag() }} 
        <p>
            {{ form.selected_test_choice.label }}
            {{ form.selected_test_choice }}
            {% for error in form.selected_test_choice.errors %} <span style="color: red;">[{{ error }}]</span> {% endfor %}
        <br>
            {{ form.entered_text.label }}
            {{ form.entered_text(size=10) }}
            {% for error in form.entered_text.errors %} <span style="color: red;">[{{ error }}]</span> {% endfor %}
        <br>
            {{ form.validated.label }}
            {{ form.validated }}
            {% if form.validated == False %}
                {{ form.submit(class_="TestForm",formnovalidate=True) }}
            {% endif %}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %} 

然后是 routes.py(这是我用来在 python 中找出问题的测试路线)

def list_validator(self,selected):
    s = selected.data
    print(f'validated = {self.data["validated"]}')
    if (s == '0') and (self.data['validated'] == True): # self.data has 5 dictionary fields
        raise ValidationError('Please select from the dropdown list')

class TestForm(FlaskForm):
    selected_test_choice = SelectField(test_choice,choices=test_choices,validators=[list_validator])
    entered_text = StringField('Enter Text',validators=[Inputrequired()])
    validated = BooleanField('check for validation on submit')
    submit = SubmitField('Submit')

它只能部分起作用。自定义验证器仍然被调用,我向它添加代码以绕过引发验证错误。但是 WTForms 附带的内置验证器仍然会被执行。如果有人有更好的实现想法,我会全力以赴。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)