使用Flask / WTForms

时间:2015-11-18 00:06:34

标签: python flask wtforms flask-wtforms

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

关键详情:

  • 表格中有3个部分
  • 这些部分必须按顺序完成,第2部分依赖第1部分的信息
  • 表单数据无用(例如将丢弃),除非此人完成了完整流程(第1,2和3节)。

我考虑接近这个的方式:

  • 使用一条路线def并在request.args中存储一个值,告诉我哪个" Section"我在render_template处于另一个表单模板,具体取决于部分。这感觉很难......
  • 为每个部分设置不同的路线和视图。这感觉不对,我不得不阻止人们通过网址直接进入第2步
  • 将所有部分放在一个表单上,使用Javascript隐藏一个表单的某些部分并在部分之间移动

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

1 个答案:

答案 0 :(得分:1)

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

我使用了你提到的第一种方法。这是它的样子:

@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

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