我正在使用Google应用引擎实施一项小型在线调查。我已经完成了调查。我现在需要的是可以将参与此调查的人的所有输入存储在数据库中。
实现这一目标的直接方法是为每个输入创建一个具有属性的实体,并在每次提交填写的调查时创建这样的实体。
由于我的调查中有大约30个输入,我想知道是否有更优雅或至少不那么繁琐的方式将post请求中的数据转换为数据存储区实体。
谢谢。
答案 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)