【发布时间】:2015-12-30 19:44:08
【问题描述】:
我试图了解g 和session 在功能和用途上的差异。两者都是“挂起”会话数据的对象,对吗?如果是这样,究竟有什么区别?在什么情况下我应该使用哪一个?
【问题讨论】:
我试图了解g 和session 在功能和用途上的差异。两者都是“挂起”会话数据的对象,对吗?如果是这样,究竟有什么区别?在什么情况下我应该使用哪一个?
【问题讨论】:
不,g 不是一个用来挂起会话数据的对象。 g 数据不会在请求之间持久化。
session 为您提供了一个存储数据的地方每个特定的浏览器。作为 Flask 应用程序的用户,使用特定浏览器返回更多请求,会话数据将在这些请求中传递。
g 是代码库不同部分之间共享的数据,一个 请求周期。 g 可以在before_request 挂钩期间设置,在teardown_request 阶段仍然可用,一旦请求完成并发送给客户端,g 就会被清除。
【讨论】:
session 是“每个客户端”数据(基于cookie?)而g 是每个请求数据?
g 的优势在于它存在于您的所有请求中,是线程安全的,并且特定于您当前的应用程序(如果您要嵌套 Flask 应用程序,其中一个调用另一个,这变得很重要)。因此,您可以使用 before_request 挂钩设置用户对象或数据库连接,然后在模板中访问相同的用户或连接,并且仍然可以在拆卸挂钩中使用,而无需将其传递给每个调用。
g 上设置一个值用于与不同的视图共享一条公共信息,而不是让每个视图将其作为参数接收。它没有被用作每个浏览器存储的东西。
url_value_preprocessor。这会将 URL 中的语言代码移出视图的参数并移至 g.lang_code。然后调用url_defaults 为所有视图函数设置默认值,并将lang_code 添加回来,以便url_for() 可以在为给定视图生成URL 时使用它。