使用web2py中的表单将数据插入数据库

时间:2016-08-20 17:02:36

标签: forms web2py

我想使用表单将数据存储在数据库中。

如何在不使用SQLFORM的情况下执行此操作 就像在php中一样,我们使用$var = $_POST['var_form']

我在modul文件中创建了一个名为Produit

的表
db.define_table('Produit',`enter code here`
           Field('Nom', requires = IS_NOT_EMPTY()),
           Field('Poid', 'float', requires = IS_NOT_EMPTY()),
           Field('Prix', 'float', requires = IS_NOT_EMPTY()),
           Field('Expiration', 'datetime'),
           auth.signature)

并创建了一个类似

的表单
{{extend 'layout.html'}}

<form action="create" method=post>

<fieldset>
<legend><h1><center><em>Ajouter un produit</em></center></h1></legend>
Nom:<br>
<input type="text" name="nom" required/>
<br>
Poid:<br>
<input type="text" name="poid" required/>
<br>
 Prix:<br>
<input type="text" name="prix" required/>
<br>
Date d'expiration:<br>
<input type="date" name="exp" required/>
<br>
<br><br>
<input type="submit" value="Ajouter">

2 个答案:

答案 0 :(得分:1)

使用URL帮助程序指定表单的操作。

<form action="{{=URL('create')}}" method=post>
...
</form>

然后在create控制器中,您可以使用request.vars

访问提交的值
db.Produit.insert(Nom=request.vars.nom, Poid=request.vars.poid,
                  Prix=request.vars.prix, Expiration=request.vars.exp)

答案 1 :(得分:0)

This answer有正确的想法,但为了使事情变得更容易,您应该使用与数据库表字段名称完全匹配的HTML字段名称。在这种情况下,您可以将插入简化为:

db.Produit.insert(**db.Produit._filter_fields(request.post_vars))

请注意,您的手动方法缺乏针对CSRF攻击(web2py表单系统将提供的)的任何保护。或者,请注意,即使您要在视图中生成自定义表单布局,仍可以使用SQLFORM。文档herehere中介绍了此方法。