使用WTForms进行表单验证,并使用Flask中的表单数据自动填充SQLAlchemy模型

时间:2013-01-23 11:39:29

标签: python flask flask-sqlalchemy flask-wtforms

我有一个表单,我必须验证,然后将数据保存在数据库中。我有一个名为SQLAlchemy的{​​{1}}模型,看起来像这样

Campaign

现在我有一个from flask.ext.sqlalchemy import SQLAlchemy db = SQLAlchemy() class Campaign(db.Model): __tablename__ = 'campaigns' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) priority = db.Column(db.SmallInteger) starts_at = db.Column(db.Date) ends_at = db.Column(db.Date) .... bla bla bla 表单用于验证,如此

WTForm

现在要验证并保存表单数据,我可以做这样的事情就是我的from flask.ext.wtf import Form, TextField, IntegerField, DateField, Required, NumberRange class CampaignForm(Form): def date_validation(form, field): #some validation on date name = TextField(validators=[Required()]) priority = IntegerField(validators=[Required(), NumberRange(min=1,max=100)]) start_date = DateField(validators=[Required(), date_validation]) end_date = DateField(validators=[Required(), date_validation]) ... bla bla bla

view

code in Flask

现在上面的代码很愚蠢,因为我必须对视图中的每个字段名称进行硬编码。还有其他方法可以用表单字段填充模型的字段吗? 感谢

3 个答案:

答案 0 :(得分:8)

您可以像这样使用.populate_obj方法:

if form.validate_on_submit():
    campaign = Campaign()
    form.populate_obj(campaign)

另请查看docs

答案 1 :(得分:4)

sqlalachemy有wtforms扩展名:

也有些人可以帮助你

来自链接:

from flaskext.wtf import Form
from wtforms.ext.appengine.db import model_form
from models import MyModel

MyForm = model_form(MyModel, Form)

答案 2 :(得分:0)

您也可以这样做:

if request.method == 'POST' and form.validate() == True:
    create new user

并将用户发送到所需的页面