使用Flask App Builder上传多个文件

时间:2016-08-06 10:29:19

标签: python html flask flask-wtforms flask-appbuilder

使用Flask创建一个简单的前端,我可以在其中选择多个文件并对它们运行一些计算。

目前我使用的是以下代码,但它仅适用于1个文件,#do something是转换发生的位置;

class Sources(SimpleFormView):
    form = MyForm
    form_title = 'This is my first form view'
    message = 'My form submitted'

    def form_get(self, form):
        form.field1.data = 'This was prefilled'

    def form_post(self, form):
        x = #do something
        return self.render_template('test.html', table = x ,name='TEST')

表单基本上允许我输入如下所示的路径:

from wtforms import Form, StringField
from wtforms.validators import DataRequired
from flask.ext.appbuilder.fieldwidgets import BS3TextFieldWidget
from flask.ext.appbuilder.forms import DynamicForm


class MyForm(DynamicForm):
    Path = StringField(('Field1'),
        description=('Your field number one!'),
        validators = [DataRequired()], widget=BS3TextFieldWidget())

我正在尝试从本地计算机中选择多个文件,然后一起处理它们。就像我们如何使用Gmail附加文件一样;

  1. 选择文件路径的选项
  2. 打开文件浏览器
  3. 存储文件路径
  4. 过程1和3重复直到达到阈值或提交。
  5. 我目前正在使用Flask App Builder来使我的前端正确。

1 个答案:

答案 0 :(得分:0)

您可以使用此HTML表单,允许用户选择多个文件:

<form method="POST" enctype="multipart/form-data" action="/upload">
  <input type="file" name="file[]" multiple="">
  <input type="submit" value="Upload Files">
</form>

然后在你的上传功能中使用Flask的getlist功能。

@app.route("/upload", methods=["POST"])
def upload():
    uploaded_files = flask.request.files.getlist("file[]")
    print uploaded_files
    return ""

我建议附加你的do something函数来接受所有文件的列表作为输入。然后做一些像

这样的事情
For file in uploaded_files:
    Process the files