我想用FileField创建一个flask_wtf表单,但是我希望文件输入是默认的。 我该如何实现? 例如:
class InvoiceForm(FlaskForm):
a = StringField()
对于这种形式,我可以直接创建为: 表格= InvoiceForm(a ='123')
对于类似的情况:
class InvoiceForm(FlaskForm):
a = FileField()
我想使用默认文件字段来调用表单。 我该如何实现?
答案 0 :(得分:1)
使用默认文件的文件路径,打开文件(具有扩展名),然后将文件对象分配给表单数据。
例如,如果您的表单FileField用于图像(例如.png,.jpg),则可以像往常一样创建表单域:
from flask_wtf.file import FileField, FileAllowed
class InvoiceForm(Form):
a = FileField(validators=[FileAllowed(['jpg', 'png'])])
然后在您的路线中,您可以从给定的文件路径中打开图像对象(请注意,我建议不要对文件路径进行硬编码,而应将其存储为环境变量)并将图像对象存储到表单中。数据:
from PIL import Image # Used for opening image objects
@example.route('/', methods=['GET', 'POST']
def example():
form = InvoiceForm()
form.a.data = Image.open(default_file_path)
# rest of route code below
请注意,当您在模板中查看表单时,文件表单字段仍将显示“未选择文件”,但是如果用户要提交表单,则文件表单字段将具有将要提交的默认图像对象。您可能可以使用一些JavaScript(请参见SO answer)为默认文件添加更好的UX。
我还建议您添加自己的表单验证,以限制文件的最大大小,可以上传的文件类型以及文件名验证,以将任何非固定文件路径转换为固定文件。有关详细信息,请参见Miguel Grinberg的Handling File Uploads With Flask。