我有一个关于 Controller 和 Form 的问题在 web2py 中工作。考虑下一个 Controller 函数(来自 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)
这个函数有两个目标:第一个是返回一个表单,第二个是告诉提交按钮要做什么。我不明白这怎么可能。它被调用了两次吗?第一次 View 需要知道什么是表单,第二次按下提交按钮?直观这 block :
if form.accepts(request,session):
response.flash = 'form accepted'
elif form.errors:
response.flash = 'form has errors'
else:
response.flash = 'please fill the form'
应该在负责后期处理的一些不同的函数中。
它是如何工作的?
是的,函数被调用了两次。当调用该函数的 URL 而没有发布任何表单值时,form.accepts()
函数失败(即返回 False),因为尚未提交任何数据。在这种情况下,返回的只是一个新的空白表格。当用户最终提交表单时,表单值将发送到同一函数。在这种情况下,form.accepts()
在 request.post_vars
中找到发布的表单数据。然后它验证数据,如果验证通过,它返回 True 并且 response.flash
设置为“接受表单”。
这称为回发或自行提交。有关更多信息,请参阅 here .
我是一名优秀的程序员,十分优秀!