【问题标题】:Flask: 'session' vs. 'g'?烧瓶:“会话”与“g”?
【发布时间】:2015-12-30 19:44:08
【问题描述】:

我试图了解gsession 在功能和用途上的差异。两者都是“挂起”会话数据的对象,对吗?如果是这样,究竟有什么区别?在什么情况下我应该使用哪一个?

【问题讨论】:

    标签: python session flask


    【解决方案1】:

    不,g 不是一个用来挂起会话数据的对象。 g 数据不会在请求之间持久化。

    session 为您提供了一个存储数据的地方每个特定的浏览器。作为 Flask 应用程序的用户,使用特定浏览器返回更多请求,会话数据将在这些请求中传递。

    另一方面,

    g 是代码库不同部分之间共享的数据,一个 请求周期g 可以在before_request 挂钩期间设置,在teardown_request 阶段仍然可用,一旦请求完成并发送给客户端,g 就会被清除。

    【讨论】:

    • 所以session 是“每个客户端”数据(基于cookie?)而g 是每个请求数据?
    • @AvivCohn:完全正确。 g 的优势在于它存在于您的所有请求中,是线程安全的,并且特定于您当前的应用程序(如果您要嵌套 Flask 应用程序,其中一个调用另一个,这变得很重要)。因此,您可以使用 before_request 挂钩设置用户对象或数据库连接,然后在模板中访问相同的用户或连接,并且仍然可以在拆卸挂钩中使用,而无需将其传递给每个调用。
    • @Martijn Pieters 我怎样才能始终使用 url_prefix 为 lang_code 使用蓝图?在这里stackoverflow.com/questions/49496761/… 我使用 g 获取 lang_code 并且我还需要将该变量放入 cookie 所以现在我认为我做错了吗?
    • @BeqaBukhradze:如果您对此有任何疑问,也许您需要发布一个。这里的评论是为了给这个帖子提供反馈,而不是要求特定的人看其他帖子。你读过flask.pocoo.org/docs/1.0/patterns/urlprocessors吗?在g 上设置一个值用于与不同的视图共享一条公共信息,而不是让每个视图将其作为参数接收。它没有被用作每个浏览器存储的东西。
    • @BeqaBukhradze:对于传入的请求,调用蓝图url_value_preprocessor。这会将 URL 中的语言代码移出视图的参数并移至 g.lang_code。然后调用url_defaults 为所有视图函数设置默认值,并将lang_code 添加回来,以便url_for() 可以在为给定视图生成URL 时使用它。
    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多