【问题标题】:How does control flow back to statements before render_template in flask?控制如何流回烧瓶中 render_template 之前的语句?
【发布时间】:2020-12-15 03:57:02
【问题描述】:

我不清楚提交时如何进行表单验证。调用索引函数时,if form.validate_on_submit 将 最初是假的吧?所以它应该返回渲染的模板。但是只有对象'form'被传递给渲染的模板,那么在返回渲染的模板之后,控制将如何流回if语句? (if form.validate_on_submit)

@app.route('/upload', methods=['GET', 'POST'])
def index():

if form.validate_on_submit():
  blah blah blah I do something......
  return redirect(url_for('index'))

return render_template('upload.html', form=form)

【问题讨论】:

  • 不会倒流。它将表单发送到浏览器并完成此功能。当用户在浏览器中单击表单中的按钮时,浏览器将表单发送到服务器(flask),服务器(flask)将表单作为新请求获取并再次运行index()。然后它再次运行if form.validate_on_submit

标签: python flask jinja2


【解决方案1】:

它不会直接返回。它将表单发送到浏览器并完成此功能(并且它忘记了当前客户端 - 它断开了该用户的连接)。当用户在浏览器中单击表单中的按钮时,浏览器必须再次与服务器(flask)连接,将新请求发送到/upload,并将表单发送到服务器(flask),服务器(flask)将表单作为新请求并运行index()再次。然后再次运行if form.validate_on_submit


也许如果你必须学习 socket 并使用它从头开始构建服务器,那么你会看到它是如何工作的 :)

【讨论】:

    【解决方案2】:

    validate_on_submit提交您的表单后使用。你的代码应该是这样的:

      @app.route('/upload', methods=['GET', 'POST'])
      def index():
        form = MyForm()
        if request.method == 'POST':   
          if form.validate_on_submit():
            blah blah blah I do something......
            return redirect(url_for('index'))
    
      return render_template('upload.html', form=form)
    

    【讨论】:

    • 您好,感谢您的回答。但我仍然不明白这一点,因为首先应该呈现 HTML 文件对吗?为此,控件应该达到return render_template('upload.html',form=form) 对吗?那么在渲染之后,如果我们在浏览器上按下提交按钮,控件怎么能回到if form.validate_on_submit(),因为那部分代码已经超出了范围?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多