找回密码
 立即注册

请求上下文

2022-2-22 10:47| 发布者: 笨鸟自学网| 查看: 3136| 评论: 0

摘要: 这部分文档描述了在 Flask 0.7 中的行为,与旧的行为基本一致,但有细小微妙的 差异。这里推荐先阅读应用上下文章节。深入上下文作用域比如说你有一个应用函数返回用户应该跳转到的 URL 。想象它总是会跳转到 URL 的 ...


留意代理

Flask 中提供的一些对象是其它对象的代理。背后的原因是,这些代理在线程间共享, 并且它们在必要的情景中被调度到限定在一个线程中的实际的对象。

大多数时间你不需要关心它,但是在一些例外情况中,知道一个对象实际上是代理是 有益的:

  • 代理对象不会伪造它们继承的类型,所以如果你想运行真正的实例检查,你需要 在被代理的实例上这么做(见下面的 _get_current_object )。
  • 如果对象引用是重要的(例如发送 信号 )

如果你需要访问潜在的被代理的对象,你可以使用 _get_current_object() 方法:

app = current_app._get_current_object()
my_signal.send(app)

错误时的上下文保护

无论错误出现与否,在请求的最后,请求上下文会出栈,并且相关的所有数据会被 销毁。在开发中,当你想在异常发生时,长期地获取周围的信息,这会成为麻烦。 在 Flask 0.6 和更早版本中的调试模式,如果发生异常,请求上下文不会被弹出栈, 这样交互式调试器才能提供给你重要信息。

从 Flask 0.7 开始,我们设定 PRESERVE_CONTEXT_ON_EXCEPTION 配置变量来 更好地控制该行为。这个值默认与 DEBUG 的设置相关。当应用工作在调试模式 下时,上下文会被保护,而生产模式下相反。

不要在生产模式强制激活 PRESERVE_CONTEXT_ON_EXCEPTION ,因为它会导致在 异常时应用的内存泄露。不过,它在开发时获取开发模式下相同的错误行为来试图 调试一个只有生产设置下才发生的错误时很有用。

123

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2025-9-13 19:02 , Processed in 0.020646 second(s), 19 queries .

© 2001-2020

返回顶部