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

标签 python flask flask-sqlalchemy flask-wtforms

我有一个表单,我必须对其进行验证,然后将数据保存在数据库中。我有一个名为 CampaignSQLAlchemy 模型,它看起来像这样

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

Flask 中的代码

class CampaignsView(MethodView):
    def post(self):
        """
        For creating a new campaign
        """
        form = CampaignForm(request.form)
        if form.validate():
            campaign = Campaign(form.name.data, form.priority.data, and so on )
            session.add(campaign)

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

最佳答案

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

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

另请查看 docs对此。

关于python - 使用 WTForms 进行表单验证,并使用 Flask 中的表单数据自动填充 SQLAlchemy 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14478830/

相关文章:

python - 在 Mac OS 上安装 pip 错误 - 权限被拒绝 : '/Library/Python/2.7/site-packages/pip'

session - 在 Flask 中调用任何 View 函数之前,如何从数据库中加载一些数据?

python - Postgres 和 SqlAlchemy 没有正确更新行

python - 有没有一种方法可以从一个文件中查找另一个文件中的单词,并将在另一个文件中找不到的单词输出到一个新文件中?

python - 使用 GAE/Django 在 Test Shop 上安装自定义应用程序

python - Matplotlib - axvspan 与子图

python - SQLAlchemy 中 peewee 的DoesNotExist 的等价物是什么?

python - 在 gcloud "ImportError: No module named MySQLdb._mysql"上运行 dev_appserver.py 时出错?

python - Flask 错误 werkzeug 路由故障排除

python - SQLALCHEMY 设置默认值 False 可空 True