控制器如何在web2py中工作?

时间:2013-01-30 19:08:35

标签: python web2py

我对控制器和Form如何在web2py中工作有疑问。 考虑下一个控制器功能(来自we2py book):

def display_form():
form=FORM('Your name:',
          INPUT(_name='name', requires=IS_NOT_EMPTY()),
          INPUT(_type='submit'))
if form.accepts(request,session):
    response.flash = 'form accepted'
elif form.errors:
    response.flash = 'form has errors'
else:
    response.flash = 'please fill the form'
return dict(form=form)

这个功能有两个目标:第一个是返回表单,第二个是告诉提交按钮做什么。 我无法理解它是如何可能的。被叫两次吗?第一次视图需要知道什么是形式,第二次按下提交按钮时? 直观地说这篇文章:

if form.accepts(request,session):
    response.flash = 'form accepted'
elif form.errors:
    response.flash = 'form has errors'
else:
    response.flash = 'please fill the form'

应该是一些负责后期处理的不同功能。

它是如何运作的?

1 个答案:

答案 0 :(得分:5)

是的,该函数被调用两次。如果在未发布任何表单值的情况下调用该函数的URL,则form.accepts()函数将失败(即返回False),因为尚未提交任何数据。在这种情况下,返回的所有内容都是新的空白表单。当用户最终提交表单时,表单值将发布到同一个函数中。在这种情况下,form.accepts()会在request.post_vars中找到已发布的表单数据。然后验证数据,如果验证通过,则返回True,response.flash设置为'表单已接受'。

这称为回发或自我提交。有关更多信息,请参阅here