使用Python实现上传功能

4
我一直在尝试使用jqxUploadFiles,但是我需要使用Python而不是PHP。
例如下面的代码:
from flask import request
from flask.ext.uploads import UploadSet, configure_uploads, ALL

def upload_file():

    files = UploadSet('files', ALL)
    app.config['UPLOADED_FILES_DEST'] = '/uploads'
    configure_uploads(app, files)
    filename = files.save(request.files['files'])
    return filename

在这个项目中,有这样一行代码:app = Flask(__name__)

但是需要说明的是:

main = Blueprint('main', __name__)

在IT技术中,有一个使用像这样的地方@main.route('/', methods=['GET', 'POST'])

还有一个create_app函数;

def create_app():
    app = Flask(__name__)
    app.config.from_object(config['development'])

    with app.app_context():
        db.app = app
        db.init_app(app)
        db.create_all()

它被用于 manage.py 文件中;

app = create_app()
manager = Manager(app)


def make_shell_context():
    return dict(app=app, db=db)
manager.add_command("shell", Shell(make_context=make_shell_context))


@manager.command
def test():
    """Run the unit tests."""
    import unittest
    tests = unittest.TestLoader().discover('tests')
    unittest.TextTestRunner(verbosity=2).run(tests)


if __name__ == '__main__':
    manager.run()

我需要使用类似于“upload_file()”的函数,但我不理解由“create_app()”创建的“app”和Blueprint()之间的关系,以及如何在upload_file()中使用它。

1个回答

1

首先,您最好制作一个定义了app的文件,并从其他脚本文件中使用它。

使用这个app,您可以注册Blueprint对象。

下面的示例实际上是一个可行的脚本。

app.py

from flask import Flask

app = Flask(__name__)

main.py

from flask import Blueprint
from flask_script import Server, Manager, Shell
from view import top
from app import app

app.register_blueprint(top.main)

if __name__ == '__main__':
    app.run(host='192.168.33.40') # please change host

view/top.py

from flask import Blueprint
main = Blueprint("top", __name__, url_prefix="/")

from flask import request, render_template, redirect
from flask.ext.uploads import UploadSet, configure_uploads, ALL

from app import app

def upload_file():

    files = UploadSet('files', ALL)
    app.config['UPLOADED_FILES_DEST'] = '/tmp' # please change
    configure_uploads(app, files)
    filename = files.save(request.files['files'])
    return filename

@main.route('/', methods=['GET'])
def index():
    return render_template('top/index.html')

@main.route('upload', methods=['GET', 'POST'])
def upload():
    upload_file()
    return redirect('/')

templates/top/index.html

<form method=POST enctype=multipart/form-data action="/upload">
    <input type=file name=files>
    <input type=submit value=upload>
</form>

如果您有任何问题,请随意提出!

谢谢您的回答,但似乎我需要检查小部件内部的某些内容。类似的代码可以在简单的HTML中工作,但是在小部件中,我一直收到错误的请求错误。 - Berk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接