2011-08-24 21 views
0

我有一个接触页面类似于控制器执行以下操作:的TurboGears 2 - 验证形式相同的URL

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

我的问题是当提交联系表单提交错误数据时公开的URL,@validate调用error_handler方法。

I.e.

  1. 的http://域名/接触” - 用户去接触网页,并在填写表单,然后点击提交
  2. 的http://域名/接触” - 如果有在表单中没有错误,用户被成功重定向到联系页面。
  3. http:// domain/processContact” - 如果表单中存在错误,则会调用联系功能,但不会从公开的processContact'页面'重定向,因此url保持不变。

我正在寻找一种方法来防止用户不必看“的http://域名/ processContact”(正确的方法是什么?)。理想情况下,用户只能看到“http:// domain/contact”。

回答

0

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

我是错了,请澄清你的问题多一点。

+0

嗨,用户会看到“http:// domain/processContact”,因为它是表单动作。 – ttran

0

设置为形式的行动接触页面本身,添加@Validate到它,但不提供error_handler。如果省略它,而不是调用error_handler,则流程会继续,您只需在tmpl_context.form_errors中找到错误。

那么你的控制器内你必须处理三种情况:

  1. tg.request.method就是让 - >渲染形式
  2. tg.request.method是POST和tmpl_contet.form_errors不为空 - >渲染表格
  3. tg.request.method是POST并且没有tmpl_contet。form_errors - > process submit + redirect