我正在关注Web2py关于SQLFORM的HTML书籍。 http://web2py.com/books/default/chapter/29/07#SQLFORM
然而,我似乎无法弄明白。我已将隐藏字段name="_formname"
及其值设置为test
。表格似乎没有被处理。这是我的代码:
的test.html:
<form action="" method="post">
<ul>
<li>Your name is <input name="name" /></li>
</ul>
<input type="submit" />
<input type="hidden" name="_formname" value="test" />
</form>
控制器/默认/ test.py:
def test():
form = SQLFORM(db.person)
if form.process(formname='test').accepted:
session.flash = T('Succeeded.')
redirect(URL('index'))
elif form.errors:
response.flash=T('Form has errors.')
return dict()
模型/ db.py:
db.define_table('person',
Field('name', requires=IS_NOT_EMPTY()))
答案 0 :(得分:2)
请注意,本书示例包括以下内容:
form.process(session=None, formname='test')
在上面,设置session=None
会禁用隐藏的“_formkey”字段,该字段用于防止CSRF攻击和双重表单提交。但是,在您的代码中,您没有设置session=None
,这意味着在提交时处理表单时,它希望接收隐藏的“_formkey”值。如果未找到该值,则处理将失败,但不会生成任何form.errors
,因此不会触发您的错误条件。要准确复制书籍示例,您必须设置session=None
。否则,如果您想保留CSRF保护(这是一个好主意),您可以将以下内容添加到表单HTML:
<input name="_formkey" type="hidden" value="{{=formkey}}" />
您还必须修改控制器功能以返回要在视图中使用的formkey值:
def test():
...
return dict(formkey=form.formkey)
答案 1 :(得分:1)
您需要将HTML代码放在名为test.html的视图
上和代码:
session.flash = T('Succeeded.')
将其更改为:
response.flash='Succeeded.'
T()查找要翻译的已定义字符串,我看不到名为Succeeded的字符串。在语言文件上。
仅尝试查看您的视图文件:
{{=form}}
通过这种方式,web2py会自动为您生成表单,不需要手动编写表单