Turbogears 2 - 验证表单到同一个URL

时间:2011-08-24 13:58:18

标签: turbogears2

我有一个类似于以下内容的联系页面控制器:

@expose('project.templates.contacts')
def contact(self, **kw):
    return dict( form=contact_form )

提交表格后,使用以下控制器方法验证表格:

@validate(form=contact_form, error_handler=contact)
@expose()
def processContact(self, **kw):
    # Do some processing on the contact form
    redirect('contact')

这是许多在线教程(例如http://turbogears.org/2.0/docs/main/FormBasics.html)所倡导的设置。

我的问题是提交联系表单时出现错误数据且@validate调用error_handler方法时显示的URL。

  1. http://域名/联系人” - 用户转到联系页面并填写表单并点击提交
  2. http:// domain / contact ” - 如果表单中没有错误,则会成功将用户重定向到联系页面。
  3. http:// domain / processContact ” - 如果表单中有错误,则调用联系人函数,但没有从公开的processContact“页面”重定向,因此网址仍然是相同。
  4. 我正在寻找一种方法(正确的方法?),以防止用户看到“ http:// domain / processContact ”。理想情况下,用户应该只看到“ http:// domain / contact ”。

2 个答案:

答案 0 :(得分:0)

[这不是答案,而是更多评论,但对于声誉问题,我不允许添加评论] 你对这个问题的描述对我来说似乎有点模糊。据我所知,用户不会看到“http:// domain / processContact”,因为它的公开中没有任何链接。换句话说,我从你的代码中理解的是: 1-如果表单中出现错误,用户将被重定向到您访问输入输入的联系页面 2-如果成功,用户将被重定向到新的联系页面

我错了,请多说清楚你的问题。

答案 1 :(得分:0)

联系人页面本身设置为表单操作,为其添加 @validate ,但不提供 error_handler 。如果省略它,而不是调用error_handler,流程会继续,您只需在 tmpl_context.form_errors 中找到错误。

然后在你的控制器内你必须处理三种情况:

  1. tg.request.method是GET - >渲染表单
  2. tg.request.method是POST而tmpl_contet.form_errors不为空 - >渲染表单
  3. tg.request.method是POST而没有tmpl_contet.form_errors - >进程提交+重定向