这部分文档描述了在 Flask 0.7 中的行为,与旧的行为基本一致,但有细小微妙的 差异。 这里推荐先阅读 应用上下文 章节。 深入上下文作用域比如说你有一个应用函数返回用户应该跳转到的 URL 。想象它总是会跳转到 URL 的 from flask import request, url_for
def redirect_url():
return request.args.get('next') or \
request.referrer or \
url_for('index')
如你所见,它访问了请求对象。当你试图在纯 Python shell 中运行这段代码时, 你会看见这样的异常: >>> redirect_url()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'request'
这有很大意义,因为我们当前并没有可以访问的请求。所以我们需要制造一个 请求并且绑定到当前的上下文。 >>> ctx = app.test_request_context('/?next=http://example.com/')
可以通过两种方式利用这个上下文:使用 with 声明或是调用 >>> ctx.push()
从这点开始,你可以使用请求对象: >>> redirect_url()
u'http://example.com/'
直到你调用 pop: >>> ctx.pop()
因为请求上下文在内部作为一个栈来维护,所以你可以多次压栈出栈。这在实现 内部重定向之类的东西时很方便。 更多如何从交互式 Python shell 中利用请求上下文的信息,请见 与 Shell 共舞 章节。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-11-9 21:05 , Processed in 0.024702 second(s), 17 queries .