首页 > 解决方案 > 如何使用 Python Flask 动态创建表单

问题描述

我有一个在我的 models.py 文件中定义的大型模型,并且我有为它服务的表单。我是否必须明确说明表单的每个字段,或者有没有办法动态创建它,所以我的代码中没有重复?

表格.py

class CustomerForm(FlaskForm):  # must be a better way

    """ Declarative Form base class responsible for customers
        variable names match customers/models.py and in the corresponding HTML files """

    tpi_name = StringField('Enter Your Name')
    tpi_ref = StringField('Enter Your Email')
    company_name = StringField('Company Name (*)', validators=[InputRequired()])
    company_type = StringField('Company Type')
    company_reg = StringField('Company Registration Number')

和forms.py

class Post(db.Model):  # Must be a better way

    """ Creates the table Post and models the structure of the database table """
    tpi_name = db.Column(db.String(100), nullable=False)
    tpi_ref = db.Column(db.String(100), nullable=False)
    company_name = db.Column(db.String(100), nullable=False)
    company_type = db.Column(db.String(100), nullable=False)
    company_reg = db.Column(db.Integer, nullable=False)

所以这里有很多重复,有没有更好的方法?

标签: python-3.xflaskflask-sqlalchemyflask-wtforms

解决方案


也许你喜欢使用 flask-admin 库:https ://flask-admin.readthedocs.io/en/latest/

它是如何工作的?Flask-Admin 背后的基本概念是,它允许您通过将各个视图分组到类中来构建复杂的界面:您在前端看到的每个网页都表示已显式添加到界面中的类上的方法。

这些视图类在绑定到特定数据库模型时特别有用,因为它们让您可以将所有常用的创建、读取、更新、删除 (CRUD) 视图逻辑组合成一个针对每个模型的独立类.

例子:

from flask_admin.contrib.sqla import ModelView

# Flask and Flask-SQLAlchemy initialization here

admin = Admin(app, name='microblog', template_mode='bootstrap3')
admin.add_view(ModelView(User, db.session))
admin.add_view(ModelView(Post, db.session))

推荐阅读