我看到的是g将从请求上下文移动到瓶0.10的应用程序上下文,这让我困惑的用途的g.
我的理解(对于Flask 0.9)是:
g 生活在请求上下文中,即在请求开始时重新创建,并且可用直到它结束g用作"请求黑板",我可以在请求的持续时间内放置相关的东西(即,在请求开始时设置一个标志并在最后处理它,可能来自before_request/ after_requestpair)g可以并且应该用于资源管理,即保存数据库连接等.Flask 0.10中哪些句子不再适用?有人能指点我讨论改变原因的资源吗?我应该在Flask 0.10中使用什么作为"请求黑板" - 我应该创建自己的应用程序/扩展特定的线程本地代理并将其推送到上下文堆栈before_request吗?如果我的应用程序存在很长时间(不像请求),那么资源管理在应用程序上下文中的重点是什么?因此资源永远不会被释放?
在before_request()函数(下面)中,/login如果用户尚未登录,我想将用户重定向到.是否有一个特殊的变量可以为我提供当前的URL,如下例所示?
@app.before_request
def before_request():
# the variable current_url does not exist
# but i want something that works like it
if (not 'logged_in' in session) and (current_url != '/login'):
return redirect(url_for('login'))
Run Code Online (Sandbox Code Playgroud)
我需要检查当前的URL /login,因为如果我不这样做,服务器进入无限循环.