发布于 2015-08-24 15:56:11 | 370 次阅读 | 评论: 0 | 来源: 网络整理
现在我们已经学会如何打开并在代码中使用数据库连接,但是如何优雅地在请求时使用它 呢?我们会在每一个函数中用到数据库连接,因此有必要在请求之前初始化连接,并在 请求之后关闭连接。
Flask 中可以使用 before_request()
、 after_request()
和 teardown_request()
装饰器达到这个目的:
@app.before_request def before_request(): g.db = connect_db() @app.teardown_request def teardown_request(exception): db = getattr(g, 'db', None) if db is not None: db.close() g.db.close()
使用 before_request()
装饰的函数会在请求之前调用,且不传递 参数。使用 after_request()
装饰的函数会在请求之后调用,且 传递发送给客户端响应对象。它们必须传递响应对象,所以在出错的情况下就不会执行。 因此我们就要用到 teardown_request()
装饰器了。这个装饰器下 的函数在响应对象构建后被调用。它们不允许修改请求,并且它们的返回值被忽略。如果 请求过程中出错,那么这个错误会传递给每个函数;否则传递 None 。
我们把数据库连接保存在 Flask 提供的特殊的 g
对象中。这个对象与 每一个请求是一一对应的,并且只在函数内部有效。不要在其它对象中储存类似信息, 因为在多线程环境下无效。这个特殊的 g
对象会在后台神奇的工作,保 证系统正常运行。
若想更好地处理这种资源,请参阅 在 Flask 中使用 SQLite 3 。
下面请阅读 步骤 5 :视图函数.