Google应用引擎:从帖子数据创建数据存储实体

时间:2014-02-01 14:34:04

标签: python google-app-engine post google-cloud-datastore

我正在使用Google应用引擎实施一项小型在线调查。我已经完成了调查。我现在需要的是可以将参与此调查的人的所有输入存储在数据库中。

实现这一目标的直接方法是为每个输入创建一个具有属性的实体,并在每次提交填写的调查时创建这样的实体。

由于我的调查中有大约30个输入,我想知道是否有更优雅或至少不那么繁琐的方式将post请求中的数据转换为数据存储区实体。

谢谢。

1 个答案:

答案 0 :(得分:2)

WTForms有一个GAE扩展,可用于从表单中的模型和模型生成表单。

  

使用WTForms,您可以为您生成表单字段HTML,但我们   让您在模板中自定义它。这可以让你维持   分离代码和表示,并保持那些凌乱的参数   你的python代码。因为我们力求松耦合,你   应该能够在你喜欢的任何模板引擎中做到这一点。

http://wtforms.simplecodes.com/docs/1.0.2/ext.html

wtforms.ext.appengine.db.model_form(model, base_class=Form, only=None, exclude=None, field_args=None, converter=None)
  

为给定的db.Model创建并返回动态wtforms.Form类   类。表单类可以原样使用,也可以作为基础   扩展表单类,然后可以混合非模型相关字段,   具有其他模型形式的子表单,以及其他可能性。

基于表单创建模型涉及创建表单对象,然后将POST数据传递给它。

http://wtforms.readthedocs.org/en/latest/forms.html#the-form-class

  

formdata - 通常用于传递来自最终用户的数据   request.POST或同等的。 formdata应该是某种形式   request-data wrapper,可以从表单中获取多个参数   输入和值是unicode字符串,例如Werkzeug / Django / WebOb   MultiDict

这里有一个类似的问题:WTForms error:TypeError: formdata should be a multidict-type wrapper

e.g。

def post(self):
   form = model_form(Ticket)
   form_object = form(formdata=self.request.POST)

from some random example I just found.