1

我有一个关于控制器和表单如何在 web2py 中工作的问题。考虑下一个控制器功能(来自 we2py 书):

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'

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

它是如何工作的?

4

1 回答 1

5

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

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

于 2013-01-30T20:06:59.693 回答