使用Flask/WTForms的多部分表单

mal*_*wan 5 python flask wtforms flask-wtforms

我有一个多部分表单来生成 - 想一下类似的工作流程到购物车,你有一个表格的多个"部分"(例如细节,账单,支付等),一次显示一个.

关键细节:

  • 我有3个部分的表格
  • 这些部分必须按顺序完成,第2部分依赖第1部分的信息
  • 表单数据是无用的(例如将被丢弃),除非该人完成了FULL过程(第1,2和3节).

我考虑接近这个的方式:

  • 使用一个Route def并存储一个值request.args告诉我我在哪个"部分"然后render_template根据部分使用不同的Form模板.这感觉很糟糕......
  • 为每个部分设置不同的路径和视图.这感觉不对,我不得不阻止人们通过URL直接进入第2步
  • 将所有Sections放在一个表单上,使用Javascript隐藏一个表单的某些部分并在这些部分之间移动

在Flask/WTForms中实现这一目标的最佳方法是什么?我上面发布的方法似乎都没有,我毫不怀疑这是一个相当普遍的要求.

Dan*_*fee 3

正如您在上一个想法中提到的那样,最优雅的解决方案无疑需要一些 javascript。您可以使用 JS 隐藏表单的不同部分,并在客户端执行必要的检查和/或数据操作,并且仅当正确且完整时才将其提交到您的 Flask 路径。

我已经使用了你提到的第一种方法。它看起来是这样的:

@simple_blueprint.route('/give', methods=['GET', 'POST'])
@simple_blueprint.route('/give/step/<int:step>', methods=['GET', 'POST'])
@login_required
def give(step=0):
    form = GiveForm()
    ...
    return blah blah
Run Code Online (Sandbox Code Playgroud)

你是对的,这感觉很“hacky”。然而,如果路由除了处理表单之外不需要做太多其他事情,它就可以工作。我的路线的工作方式是收集数据,然后向用户询问一系列有关数据的问题。您解释情况的方式,需要收集每个步骤的数据,我真的会推荐 javascript 解决方案。