Flask 是否将表单数据直接传递给SQLalchemy对象?

Flask 是否将表单数据直接传递给SQLalchemy对象?,flask,sqlalchemy,wtforms,Flask,Sqlalchemy,Wtforms,我用的烧瓶有WTForms和SQLAlchemy。我目前有以下设置: SQLAlchemy类: class User(Base): __tablename__ = 'user' name = db.Column(db.String) last_name = db.Column(db.String) __init__(name, last_name): self.name = name self.last_name = last_n

我用的烧瓶有WTForms和SQLAlchemy。我目前有以下设置:

SQLAlchemy类:

class User(Base):
    __tablename__ = 'user'
    name = db.Column(db.String)
    last_name = db.Column(db.String)

    __init__(name, last_name):
        self.name = name
        self.last_name = last_name
相应表格:

class CreateUserForm(Form):
    name = StringField('Name')
    last_name = StringField('Last name')
路线:

@user.route('/', methods=['POST'])
def create():
    form = CreateUserForm(request.form)

    if form.validate():
        user = User(form.name.data, form.last_name.data)
        ...
这只是一个简化的示例,但我想知道的是,是否可以通过某种方式将表单变量传递给用户构造函数,并一直传递给SQLAlchemy中的用户类?由于表单中的字段与构造函数中的字段和用户数据库表中的字段相同,所以这将是一件好事

我希望我的路线看起来像这样:

@user.route('/', methods=['POST'])
def create():
    form = CreateUserForm(request.form)

    if form.validate():
        user = User(form)
        ...

因此,我不必在每个部分中处理form.name和form.last_name。

要从现有模型设置表单数据,请使用以下命令:

my_model = # ...

form = CreateUserForm(obj=my_model)
form = CreateUserForm(request.form)
if form.validate_on_submit():
    user = User()
    form.populate_obj(user) # Copies matching attributes from form onto user
要从填充的表单(例如,回发后)设置模型,请使用以下命令:

my_model = # ...

form = CreateUserForm(obj=my_model)
form = CreateUserForm(request.form)
if form.validate_on_submit():
    user = User()
    form.populate_obj(user) # Copies matching attributes from form onto user

请参阅上的文档。还可以考虑使用和.

< P>从现有模型中设置表单的数据,使用以下内容:

my_model = # ...

form = CreateUserForm(obj=my_model)
form = CreateUserForm(request.form)
if form.validate_on_submit():
    user = User()
    form.populate_obj(user) # Copies matching attributes from form onto user
要从填充的表单(例如,回发后)设置模型,请使用以下命令:

my_model = # ...

form = CreateUserForm(obj=my_model)
form = CreateUserForm(request.form)
if form.validate_on_submit():
    user = User()
    form.populate_obj(user) # Copies matching attributes from form onto user

请参阅上的文档。也考虑使用和.< /P>谢谢,我会试试看!出于好奇,为什么在大多数情况下都有特殊的烧瓶包装?使用Flask WTF而不是原始软件包有什么更好的地方?@VA-Flask WTF和WTForms Alchemy都有助于删除样板文件编码-尤其是当您的Flask项目变得越来越复杂时。谢谢,我会尝试一下!出于好奇,为什么在大多数情况下都有特殊的烧瓶包装?使用Flask WTF而不是原始软件包有什么更好的地方?@VA-Flask WTF和WTForms Alchemy都有助于删除样板文件编码,尤其是当您的Flask项目变得越来越复杂时。