【问题标题】:How to create WTForms FileField with a default file?如何使用默认文件创建 WTForms FileField?
【发布时间】:2020-03-03 17:16:44
【问题描述】:

我想创建一个带有 FileField 的 flask_wtf 表单,但我希望文件输入为默认值。 我怎样才能做到这一点? 例如:

class InvoiceForm(FlaskForm):
    a = StringField()

对于这种形式,我可以直接创建为: form = InvoiceForm(a='123')

类似情况:

class InvoiceForm(FlaskForm):
    a = FileField()

我想用默认文件域调用表单。 我怎样才能做到这一点?

【问题讨论】:

    标签: flask wtforms


    【解决方案1】:

    使用默认文件的文件路径,打开文件(给定扩展名)并将文件对象分配给表单数据。

    例如,如果您的表单 FileField 用于图像(例如 .png、.jpg),那么您可以像往常一样创建表单字段:

    from flask_wtf.file import FileField, FileAllowed   
    
    class InvoiceForm(Form):
      a = FileField(validators=[FileAllowed(['jpg', 'png'])])
    

    然后在您的路径中,您可以从给定的文件路径打开图像对象(注意我建议不要硬编码文件路径,而是将其存储为环境变量)并将图像对象存储到 form.a。数据:

    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)为默认文件添加更好的用户体验。

    我还建议添加您自己的表单验证以限制文件的最大大小、可以上传的文件类型以及文件名验证以将任何非平面文件路径转换为平面文件。有关详细信息,请参阅 Miguel Grinberg 的Handling File Uploads With Flask

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2012-08-19
      相关资源
      最近更新 更多