例如,此代码:
from flask import session
@app.route('/is_logged_in/')
def is_logged_in():
return 'user' in session
在运行Flask的开发服务器时,它运行正常,但在任何服务器上都会在任何网络服务器设置(FastCGI,uWSGI等)上引发500
错误(Apache,nginx ,Lighttpd)。
有人知道为什么吗?
我的实际代码在GitHub上,如果重要的话。
在使用Flask的内部服务器运行时,它可以完美运行,但我无法使用任何会话变量来使用生产网络服务器:https://github.com/Blender3D/Webminal/blob/master/server.py
答案 0 :(得分:14)
我终于尝试Tornado,认为它会对我的问题有所帮助(毕竟它是用Python编写的)。
瞧,这是一个可读的追溯:
RuntimeError: the session is unavailable because no secret key was set.
Set the secret_key on the application to something unique and secret.
看起来我忘了添加一个密钥来签署会话:
app.secret_key = 'why would I tell you my secret key?'
答案 1 :(得分:1)
您的返回值必须是以下几种类型之一:basestring
(string
或unicode
),tuple
(表示传递给{{{}的构造函数的参数1}} object),一个Response
对象本身,或者 - 失败的 - 一个WSGI可调用的函数。
您将返回Response
。 Flask假设因为它不是bool
,basestring
或tuple
对象,所以它必须是WSGI可调用的。随后,在处理响应时,它会尝试调用()您的Response
返回值,这会导致异常。 Flask捕获生成的TypeError。当Flask处于调试模式时,它会将其传递给Werkzeug的简单Web服务器,该服务器将调用内置调试器。但是,当Flask处于生产模式时,它只会冒出内部服务器错误 - 例如代码500 - 而没有更多信息。
因此,要解决您的问题,请确保执行此操作:
bool
答案 2 :(得分:0)
虽然,它并没有真正回答你的问题,但我会这样重写:
from flask import redirect, session, url_for
@app.route('/')
def index():
return 'foo'
@app.route('/is_logged_in/')
def is_logged_in():
user = session.get('user', None)
if user:
return user
return redirect(url_for('index'))