【问题标题】:Clear valid form after it is submitted提交后清除有效表格
【发布时间】:2015-11-03 21:19:46
【问题描述】:

我想在验证后重置表单。目前表单提交并生效后仍会显示之前的数据。基本上,我希望表单恢复到所有字段都干净的原始状态。这样做的正确方法是什么?

@mod.route('/', methods=['GET', 'POST'])
def home():
    form = NewRegistration()

    if form.validate_on_submit():
        #save in db

        flash(gettext(u'Thanks for the registration.'))

    return render_template("users/registration.html", form=form)

【问题讨论】:

    标签: python flask wtforms flask-wtforms


    【解决方案1】:

    问题是您总是使用传入的任何数据呈现表单,即使该数据已验证并已处理。另外,浏览器会保存上次请求的状态,所以如果此时刷新页面,浏览器会重新提交表单。

    处理成功的表单请求后,重定向到页面以获取新状态。

    @app.route('/register', methods=['GET', 'POST'])
    def register():
        form = RegistrationForm()
    
        if form.validate_on_submit():
            # do stuff with valid form
            # then redirect to "end" the form
            return redirect(url_for('register'))
    
        # initial get or form didn't validate
        return render_template('register.html', form=form)
    

    【讨论】:

      【解决方案2】:

      大卫主义的答案是正确的。

      但是一旦我不得不重新加载一个只有几个字段必须重置的表单。 所以,我这样做了,也许这不是最干净的方式,但它对我有用:

      form = MyForm()
      
          if form.validate_on_submit():
              # save all my data...
              myvar1 = form.field1.data
              myvar2 = form.field2.data
              # etc...
      
          # at first GET and at every reload, this is  what gets executed:
          form.field1.data = "" # this is the field that must be empty at reload
          form.field2.data = someobject # this is a field that must be filled with some value that I know
      
          return render_template('mypage.html', form=form)
      

      【讨论】:

      • 你好,如果我使用的是html表单,表单提交失败后如何传递之前的值(比如因为recaptcha无效)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2016-03-30
      相关资源
      最近更新 更多