首页 文章

HTML2中的Web2py SQLFORM

提问于
浏览
1

我正在关注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()))

2 回答

  • 1

    请注意,本书示例包括以下内容:

    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)
    
  • 2

    您需要将HTML代码放在名为test.html的视图上

    和代码:

    session.flash = T('Succeeded.')
    

    将其更改为:

    response.flash='Succeeded.'
    

    T()查找要翻译的已定义字符串,我看不到名为Succeeded的字符串 . 在语言文件上 .

    仅尝试您的视图文件:

    {{=form}}
    

    通过这种方式,web2py会自动为您生成表单,不需要手动编写表单

相关问题