基于数组的烧瓶形式服务器端生成
flask form server side generation based on array
我正在尝试创建一个具有多种不同形式的网站。这些表单大部分是相同的,它们只是每个都有一些用户必须输入的额外的不同变量,即它们都有名称、描述和文件字段,但每个都有一些不同的额外字段。我想知道是否有办法从 Flask 中的单个表单动态生成这些字段。例如
from flask_wtf import FlaskForm
from wtforms import StringField, FileField, TextField, SubmitField
class dataEntryForm(FlaskForm, variables):
name = StringField('Name', [DataRequired()])
description = TextField('Description')
for variable in variables:
#generate a field with the name variable
uploadFile = FileField('File', [DataRequired()])
submit = SubmitField('Enter Job')
如果我理解你的顾虑,你可以定义一个基础 class UserForm
例如,它包含公共字段,然后使用 Mixins
扩展其属性(阅读更多 here).根据您的逻辑,您可以根据需要定义许多 Mixins
:
class UserForm(DateStampsFormMixin, SocialAccountsFormMixin, FlaskForm):
name = StringField('Name', [DataRequired()])
description = TextField('Description')
uploadFile = FileField('File', [DataRequired()])
submit = SubmitField('Enter Job')
2以下Mixins
:
class SocialAccountsFormMixin(FlaskForm):
website_url = StringField('website url', [..])
twitter_url = StringField('twitter url', [..])
github_url = StringField('github url', [..])
[..]
和
class DateStampsFormMixin(FlaskForm):
created_at = DateTimeField('Created at', [..])
updated_at = DateTimeField('Updated at', [..])
我正在尝试创建一个具有多种不同形式的网站。这些表单大部分是相同的,它们只是每个都有一些用户必须输入的额外的不同变量,即它们都有名称、描述和文件字段,但每个都有一些不同的额外字段。我想知道是否有办法从 Flask 中的单个表单动态生成这些字段。例如
from flask_wtf import FlaskForm
from wtforms import StringField, FileField, TextField, SubmitField
class dataEntryForm(FlaskForm, variables):
name = StringField('Name', [DataRequired()])
description = TextField('Description')
for variable in variables:
#generate a field with the name variable
uploadFile = FileField('File', [DataRequired()])
submit = SubmitField('Enter Job')
如果我理解你的顾虑,你可以定义一个基础 class UserForm
例如,它包含公共字段,然后使用 Mixins
扩展其属性(阅读更多 here).根据您的逻辑,您可以根据需要定义许多 Mixins
:
class UserForm(DateStampsFormMixin, SocialAccountsFormMixin, FlaskForm):
name = StringField('Name', [DataRequired()])
description = TextField('Description')
uploadFile = FileField('File', [DataRequired()])
submit = SubmitField('Enter Job')
2以下Mixins
:
class SocialAccountsFormMixin(FlaskForm):
website_url = StringField('website url', [..])
twitter_url = StringField('twitter url', [..])
github_url = StringField('github url', [..])
[..]
和
class DateStampsFormMixin(FlaskForm):
created_at = DateTimeField('Created at', [..])
updated_at = DateTimeField('Updated at', [..])