flask - Flask flash 消息导致 Session 不可用
问题描述
使用官方文档中的确切代码:
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
...
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
..
flash('File was successfully uploaded')
return redirect(url_for('uploaded_file', filename=filename))
return render_template('home.html')
没有flash()
一切工作正常。但是添加时会导致错误会话不可用,因为没有秘密。下面是一个痕迹:
> 127.0.0.1 - - [18/Feb/2019 10:16:21] "POST / HTTP/1.1" 500 -
> 127.0.0.1 - - [18/Feb/2019 10:17:16] "GET / HTTP/1.1" 200 - [2019-02-18 10:17:23,999] ERROR in app: Exception on / [POST]
> Traceback (most recent call last): File
> "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 2292, in wsgi_app
> response = self.full_dispatch_request() File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1815, in full_dispatch_request
> rv = self.handle_user_exception(e) File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1718, in handle_user_exception
> reraise(exc_type, exc_value, tb) File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/_compat.py",
> line 35, in reraise
> raise value File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1813, in full_dispatch_request
> rv = self.dispatch_request() File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/app.py",
> line 1799, in dispatch_request
> return self.view_functions[rule.endpoint](**req.view_args) File "/home/dvperv/PycharmProjects/astros/app.py", line 39, in upload_file
> flash('No file part') File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/helpers.py",
> line 410, in flash
> session['_flashes'] = flashes File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/werkzeug/local.py",
> line 350, in __setitem__
> self._get_current_object()[key] = value File "/home/dvperv/PycharmProjects/astros/venv/lib/python3.6/site-packages/flask/sessions.py",
> line 101, in _fail
> raise RuntimeError('The session is unavailable because no secret ' RuntimeError: The session is unavailable because no secret key was
> set. Set the secret_key on the application to something unique and
> secret.
> 127.0.0.1 - - [18/Feb/2019 10:17:24] "POST / HTTP/1.1" 500 -
我已经阅读了几篇关于这个错误的帖子,但它们都与 Flask-Session 扩展有关,我不使用它。
我也尝试app.secret_key = 'super secret key'
在应用程序中添加,但没有成功。
我应该使用 Flask Session 并进行适当的配置,还是有一种方法只使用普通的 Flask flash(),它以某种方式在幕后与会话本身一起工作。
应用配置:
app = Flask(__name__)
UPLOAD_FOLDER = ..
ALLOWED_EXTENSIONS = ..
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
if __name__ == '__main__':
app.run()
解决方案
在堆栈跟踪中非常清楚地说明未设置密钥。请务必将密钥设置在正确的位置,例如这里:
app = Flask(__name__)
app.secret_key = 'asrtarstaursdlarsn'
UPLOAD_FOLDER = ..
推荐阅读
- grails - WFLYCTL0180:缺少/不可用依赖项的服务
- angularjs - 通过 $resource 身份验证发布数据?
- c# - 未注册名为“默认”的 IUserTokenProvider
- macos - 如何在不卸载应用程序的情况下移除木桶?
- node.js - 对话流中的网页抓取
- r-markdown - knitr 不识别已安装的包,但单独运行块没有问题
- python - Pandas - Get a row of data when looping through groupBy results
- r - 根据行中的不同数据创建新数据框
- docker - 如何访问 Docker 容器内的根文件夹
- java - Hibernate:仅允许具有给定属性的实体加入 OneToMany 关联