我试图理解 g
和 session
之间在功能和目的上的区别。它们都是用来存储会话数据的对象,是吗?如果是这样的话,它们的区别是什么,我应该在什么情况下使用其中的哪一个呢?
g
不是一个用于挂载会话数据的对象。g
数据在请求之间不持久化。
session
提供了一个存储数据的位置,以每个特定的浏览器为单位。作为 Flask 应用程序的用户,在特定浏览器中使用更多的请求,会话数据会在这些请求之间传递。g
是在一个请求周期内不同代码部分之间共享的数据。可以在before_request
钩子期间设置g
,并且在teardown_request
阶段仍然可用。一旦请求完成并发送给客户端,g
就会被清除。
session
是“每个客户端”的数据(基于 cookie?),而g
是每个请求的数据? - Aviv Cohng
的好处在于它存在于您的所有请求中,是线程安全的,并且针对当前应用程序特定(如果您要嵌套 Flask 应用程序,在一个应用程序调用另一个应用程序时这一点变得很重要)。因此,您可以使用before_request
钩子设置用户对象或数据库连接,然后在模板中访问相同的用户或连接,并在拆卸钩子中仍然可用,而无需将其传递给每个调用。 - Martijn Pieters