我有一个表单,我必须验证,然后将数据保存在数据库中。我有一个名为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
现在上面的代码很愚蠢,因为我必须对视图中的每个字段名称进行硬编码。还有其他方法可以用表单字段填充模型的字段吗? 感谢
答案 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
并将用户发送到所需的页面