0

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

@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。

IE

  1. http://domain/contact ” - 用户进入联系页面并填写表格并点击提交
  2. http://domain/contact ” - 如果表单中没有错误,用户将成功重定向到联系页面。
  3. http://domain/processContact ” - 如果表单中有错误,则调用联系函数,但没有来自暴露的 processContact 'page' 的重定向,因此 url 保持不变。

我正在寻找一种方法(正确的方法?)来防止用户不得不看到“ http://domain/processContact ”。理想情况下,用户应该只看到“ http://domain/contact ”。

4

2 回答 2

0

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

如果我弄错了,请进一步澄清您的问题。

于 2011-09-23T10:12:42.010 回答
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 -> 处理提交 + 重定向
于 2013-02-08T08:45:19.687 回答