【问题标题】:WTForms with a variable amount of textareas具有可变数量 textareas 的 WTForms
【发布时间】:2015-08-22 18:02:31
【问题描述】:

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

由于我没有使用 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 中呈现。由于文本区域被添加到表单中,因此无法验证它们,因为它们没有在 python 代码中定义以创建 WTForms。

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

【问题讨论】:

  • 我认为答案是肯定的,但我不确定我是否理解您对验证的担忧。你用过WTForms吗?我可以看到一种通过单击按钮来添加文本区域的方法。您可以使用作为 WTForms 一部分的 validate_on_submit() 函数作为添加新文本区域的触发器。如果这些东西对你来说是新的,我可以试着写一个答案。我也是 Flask 的新手,所以我的回答在技术上可能不正确。
  • 那我该怎么办呢?因为据我所知,在使用 WTForms 之前,我必须在 Python 中指定表单及其文本区域,然后才能将其呈现为 HTML。
  • 为了我自己的学习目的,我还没有开始实际编写代码,无论答案是否出现,我都打算这样做。我认为,如果您在 Python 中声明一个全局字典,您可以将按钮单击传达给 Python 脚本,并通过适当的控制发送一个新的文本区域以进行渲染,一旦重定向。您可能不需要全局字典...但是 render_template 的参数需要在视图函数中生成。这就是我的看法。我敢肯定,考虑到这一点会有一个扩展。
  • 我对向页面添加文本区域没有任何问题,我正在使用 javascript 进行此操作,但它只是让这些新的文本区域与 WTForms 一起使用。
  • 你能展示一些代码吗?即烧瓶应用程序的相关部分和项目目录结构。由于某种原因,我不了解您的问题,我认为查看一些代码将帮助我了解发生了什么。

标签: python flask wtforms flask-wtforms


【解决方案1】:

我解决此问题的方法是使用 WTForms 验证 &lt;input type=text&gt;,然后在文本区域为空时使用简单的 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

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 2018-07-20
    • 2014-06-02
    • 1970-01-01
    • 2013-08-26
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多