RuntimeError:无法访问请求外的配置

tec*_*tor 15 python flask

我收到以下错误:

RuntimeError: cannot access configuration outside request
Run Code Online (Sandbox Code Playgroud)

从执行以下代码:

# -*- coding: utf-8 -*-

from flask import Flask, request, render_template, redirect, url_for
from flaskext.uploads import UploadSet, configure_uploads, patch_request_class

app = Flask(__name__)
csvfiles = UploadSet('csvfiles', 'csv', "/var/uploads")

@app.route("/")
def index():
    return "Hello World!"

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST' and 'csvfile' in request.files:
        filename = csvfiles.save(request.files['csvfile']) # the error occurs here!
        return redirect(url_for('index'))
    return render_template('upload.html')

if __name__ == "__main__":
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

我不明白错误信息本身,我不知道如何解决问题.我阅读官方文档,似乎我必须做一些配置(在哪里存储上传),但我不知道如何以正确的方式做到这一点.

我正在使用Flask-Uploads扩展程序.

这是在python 2.7虚拟环境中运行的,其中包含以下已安装的软件包:

Flask==0.10.1
Flask-Uploads==0.1.3
Jinja2==2.7.2
MarkupSafe==0.23
Werkzeug==0.9.4
argparse==1.2.1
itsdangerous==0.24
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 20

您尚未配置Flask-Uploads扩展程序.使用此configure_uploads()功能将您的上传设备附加到您的应用:

from flaskext.uploads import UploadSet, configure_uploads

app = Flask(__name__)
app.config['UPLOADED_CSVFILES_DEST'] = '/var/uploads'
csvfiles = UploadSet('csvfiles', ('csv',))
configure_uploads(app, (csvfiles,))
Run Code Online (Sandbox Code Playgroud)

UploadSet()采用一系列扩展的第二个参数.不要将文件路径传递给UploadSet; 你会使用你的Flask配置.

设置UPLOADED_<name-of-your-set>_DEST,名称为大写.这就是UPLOADED_CSVFILES_DEST.您也可以设置UPLOADS_DEFAULT_DEST配置; 它将被用作基本目录,每个集名称都有单独的子目录.

或者,第3个参数可以是可调用的:

configure_uploads(app, (csvfiles,), lambda app: '/var/uploads')
Run Code Online (Sandbox Code Playgroud)

  • @tector:不,你需要设置`UPLOADED_ <在大写字母中设置名称> _DEST`. (2认同)