WTForms具有可变数量的textareas

时间:2015-08-22 18:02:31

标签: python flask wtforms flask-wtforms

我的Flask应用程序有一个HTML表单,其中包含一个textarea但是,用户可以按下一个按钮,在表单中添加另一个textarea来创建无限量的textareas。

由于我没有使用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>

所以在我的情况下,我在开头也有一个输入,我想验证。我还要验证所有textareas,以便它们不被允许为空。

我想用WTForms来验证这个,但是要用WTForms创建一个表单,它必须用Python创建然后用HTML呈现。由于textareas被添加到表单中,因此无法验证它们,因为它们未在python代码中定义以创建WTForms。

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

1 个答案:

答案 0 :(得分:0)

我解决这个问题的方法是使用WTForms验证<input type=text>,然后使用简单的flash()消息作为textareas,如果它们是空的。

@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