找回密码
 立即注册

应用上下文

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

摘要: 0.9 新版功能.Flask 背后的设计理念之一就是,代码在执行时会处于两种不同的“状态”(states)。 当Flask对象被实例化后在模块层次上应用便开始隐式地处于应用配置状 态。一直到第一个请求还是到达这种状态才隐式地 ...


上下文用法

上下文的一个典型应用场景就是用来缓存一些我们需要在发生请求之前或者要使用的 资源。举个例子,比如数据库连接。当我们在应用上下文中来存储东西的时候你 得选择一个唯一的名字,这是因为应用上下文为 Flask 应用和扩展所共享。

最常见的应用就是把资源的管理分成如下两个部分:

  1. 一个缓存在上下文中的隐式资源
  2. 当上下文被销毁时重新分配基础资源

通常来讲,这将会有一个 get_X() 函数来创建资源 X ,如果它还不存在的话。 存在的话就直接返回它。另外还会有一个 teardown_X() 的回调函数用于销毁资源 X 。

如下是我们刚刚提到的连接数据库的例子:

import sqlite3
from flask import g

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = connect_to_database()
    return db

@app.teardown_appcontext
def teardown_db(exception):
    db = getattr(g, '_database', None)
    if db is not None:
        db.close()

当 get_db() 这个函数第一次被调用的时候数据库连接已经被建立了。 为了使得看起来更隐式一点我们可以使用 LocalProxy 这 个类:

from werkzeug.local import LocalProxy db = LocalProxy(get_db)

这样的话用户就可以直接通过访问 db 来获取数据句柄了, db 已经在内部完 成了对 get_db() 的调用。

123
上一篇:即插视图下一篇:请求上下文

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

GMT+8, 2025-8-31 00:51 , Processed in 0.018718 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2017 Discuz Team. Template By 【未来科技】【 www.wekei.cn 】

返回顶部