我收到了以下错误:
RuntimeError: cannot access configuration outside request
执行以下代码:
# -*- 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)
我不了解错误信息本身,我也不知道如何解决问题。 我阅读了官方文档,似乎我必须做一些配置(在哪里存储上传文件),但我不知道如何以正确的方式做到这一点。
我正在使用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
答案 0 :(得分:20)
你还没有configured the Flask-Uploads extension。使用configure_uploads()
function将您的上传文集附加到您的应用:
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,))
UploadSet()
的第二个参数采用扩展的序列。不要将文件路径传递给UploadSet
;你会改用Flask configuration。
设置UPLOADED_<name-of-your-set>_DEST
,其名称为大写。这是UPLOADED_CSVFILES_DEST
。您还可以设置UPLOADS_DEFAULT_DEST
配置;它将被用作基本目录,每个集名都有单独的子目录。
或者,第3个参数可以是可调用的:
configure_uploads(app, (csvfiles,), lambda app: '/var/uploads')