javascript - Dropzone 上传到 Flask 应用后不会重定向

标签 javascript python flask dropzone.js

我正在编写一个资源,以使用 Dropzone 将文件上传到 Flask 应用程序。文件上传后,应用程序应重定向到 hello world 页面。这没有发生,应用程序卡在上传文件的 View 上。我正在使用 master 的 jQuery 3.1.0 和 Dropzone。

from flask import Flask, request, flash, redirect, url_for render_template)
from validator import Validator

ALLOWED_EXTENSIONS = set(['csv', 'xlsx', 'xls'])

def allowed_file(filename):
    return (filename != '') and ('.' in filename) and \
           (filename.split('.')[-1] in ALLOWED_EXTENSIONS)

def create_app():
    app = Flask(__name__)
    app.secret_key = 'super secret key'
    return app

app = create_app()

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/world')
def hello_world():
    return render_template('hello_world.html')

@app.route('/upload', methods=['POST'])
def upload():
    # check that a file with valid name was uploaded
    if 'file' not in request.files:
        flash('No file part')
        return redirect(request.url)
    file = request.files['file']
    if not allowed_file(file.filename):
        flash('No selected file')
        return redirect(request.url)

    # import ipdb; ipdb.set_trace()
    validator = Validator(file)
    validated = validator.validate()
    if validated:
        flash('Success')
    else:
        flash('Invalid file')
    return redirect(url_for('hello_world'))

if __name__ == '__main__':
    app.run(debug=True)
{% extends "base.html" %}

{% block head %}
    <link href="/static/css/dropzone.css" rel="stylesheet">
    <script src="/static/js/dropzone.js"></script>
{% endblock %}
{% block body %}
    <main>
        <section>
            <div id="dropzone">
                <form action="upload" method="post" class="dropzone dz-clickable" id="demo-upload" multiple>
                    <div class="dz-message">
                        Drop files here or click to upload.
                    </div>
                </form>
            </div>
        </section>
    </main>
{% endblock %}

最佳答案

我在我的 Flask 应用程序中遇到了类似的问题,我用以下 jQuery 函数解决了它:

Dropzone.options.myDropzone = {

autoProcessQueue: false,

init: function() {
    var submitButton = document.querySelector("#upload-button");
    myDropzone = this;

    submitButton.addEventListener("click", function() {
        myDropzone.processQueue();
    });

    this.on("sending", function() {
        $("#myDropzone").submit()
    });
  }
};

参数“sending”在文件发送之前被调用,这样我就可以提交我的拖放区表单。有了这个,我的 flask 应用程序中的所有重定向都可以正常工作。

为清楚起见,我的 html 代码片段:

<form action="/" method="POST" class="dropzone" id="myDropzone" enctype="multipart/form-data">

</form>

关于javascript - Dropzone 上传到 Flask 应用后不会重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38621273/

相关文章:

python - 如何从 Flask 中的不同蓝图调用方法?

flask - 带 flask 的 pymongo

javascript - 第一次点击后更改按钮 onclick

python - PyQt5 QListWidget 带有复选框和拖放

python - 如何在 Python 中对 H2O 启用 GPU 加速?

python - 导入错误 : No module named remote

python - 由于 ModuleNotFoundError : No module named 'wsgi' ,Flask 无法使用 Docker 启动服务器

javascript - Web API 发布参数

javascript - 在这种情况下如何阻止 jQuery 函数多次执行?

javascript - 无法在 JSX 中渲染 bool 值?