gpt4 book ai didi

python - HTML 中的 Web2py SQLFORM

转载 作者:行者123 更新时间:2023-11-30 23:39:29 24 4
gpt4 key购买 nike

我正在关注 Web2py 的关于 HTML 中的 SQLFORM 的书。 http://web2py.com/books/default/chapter/29/07#SQLFORM

但是,我似乎无法弄清楚。我已将隐藏字段 name="_formname" 及其值设置为 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>

Controller /default/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()))

最佳答案

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

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}}" />

您还必须修改 Controller 函数以返回在 View 中使用的 formkey 值:

def test():
...
return dict(formkey=form.formkey)

关于python - HTML 中的 Web2py SQLFORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com