具有可变数量文本区域的 WTForms

WTForms with a variable amount of textareas

我的 Flask 应用程序有一个 HTML 表单,其中包含一个文本区域,但是,用户可以按下一个按钮,将另一个文本区域添加到表单以创建无限数量的文本区域。

因为我没有使用 WTForms,所以验证要困难得多,所以我在客户端使用 Javascript 完成了验证,但是任何具有编程技能的人都可以编辑此代码,这是不安全的。我更愿意使用 WTForms 验证表单。

这甚至可以用 WTForms 和 Flask 来做,还是我必须用 Flask 创建自己的方法并闪烁消息来验证表单?谢谢

编辑:

HTML:

<form id="myForm">
  <input type="text">
  <textarea></textarea>
  <textarea></textarea>
</form>
<button onclick="add()">Add textarea</button>

<script>
  function add() {
    var textarea = document.createElement('textarea');
    document.getElementById('myForm').appendChild(textarea);
  }
</script>

所以在我的例子中,我在开始时也有一个我想要验证的输入。我还想验证所有文本区域,以便它们不允许为空。

我想用 WTForms 验证这一点,尽管要用 WTForms 创建一个表单,它必须在 Python 中创建,然后在 HTML 中呈现。由于将文本区域添加到表单,因此无法对其进行验证,因为它们未在创建 WTForms 的 python 代码中定义。

问题是,我希望能够将表单元素添加到使用 WTForms 创建的表单中。

我解决这个问题的方法是使用 WTForms 验证 <input type=text>,然后在文本区域为空时使用简单的 flash() 消息。

@app.route('/form')
def form():
  form = some_form()

  if request.method == 'POST':
        newQuestions = []
        i = 1
        alreadyBlank = False
        while True:
            try:
                question = request.form['question' + str(i)]

                if question.strip(' \t\n\r') == '' and not alreadyBlank
                    flash('Please don\'t leave any questions blank.')
                    alreadyBlank = True

                newQuestions.append(question)
                i += 1
            except:
                break

  if form.validate_on_submit():
    input_content = form.input.data