### 导航
- [索引](# "总目录")
- [下一页](# "Flask 代码模式") |
- [上一页](# "Flask 扩展") |
- [Flask 0.10.1 文档](#) »
# 与 Shell 共舞
0.3 新版功能.
Python 拥有的交互式 Shell 是人人都喜欢它的一个重要原因。交互式 Shell允许你实时的运行 Python 命令并且立即得到返回结果。Flask 本身并未内置一个交互式 Shell ,因为它并不需要任何前台的特殊设置,仅仅导入您的应用然后开始探索和使用即可。
然而这里有一些易于获得的助手,可以帮助您在 Shell 遨游时获得更为愉悦的体验。交互式控制台回话的一个重要问题是,您并不是像在浏览器当中那样激发一个请求,因此 [g](# "flask.g") 和 [request](# "flask.request")以及其他的一些函数不能使用。然而您想要测试的代码也许依赖他们,那么让我们瞧瞧该如何解决这个问题。
这就是该那些辅助函数登场的时候了。然而应当说明的是,这些函数并非仅仅为在交互式 Shell 里使用而编写的,也可以用于单元测试或者其他需要一个虚假的请求上下文的情景。
一般来说,在阅读本章节之前还是建议大家先阅读 [*请求上下文*](#)相关章节。
### 创建一个请求上下文
从 Shell 创建一个合适的上下文,最简单的方法是使用[test_request_context](# "flask.Flask.test_request_context") 方法,此方法会创建一个 [RequestContext](# "flask.ctx.RequestContext") 对象:
~~~
>>> ctx = app.test_request_context()
~~~
一般来说,您可以使用 with 声明来激活这个请求对象,但是在终端中,调用 [push()](# "flask.ctx.RequestContext.push")方法和 [pop()](# "flask.ctx.RequestContext.pop") 方法会更简单:
~~~
>>> ctx.push()
~~~
从这里往后,您就可以使用这个请求对象直到您调用 pop方法为止:
~~~
>>> ctx.pop()
~~~
### 激发请求发送前后的调用
仅仅创建一个请求上下文,您仍然不能运行请求发送前通常会运行的代码。如果您在将连接数据库的任务分配给发送请求前的函数调用,或者在当前用户并没有被储存在 [g](# "flask.g") 对象里等等情况下,您可能无法访问到数据库。
您可以很容易的自己完成这件事,仅仅手动调用[preprocess_request()](# "flask.Flask.preprocess_request") 函数即可:
~~~
>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()
~~~
请注意, [preprocess_request()](# "flask.Flask.preprocess_request") 函数可能会返回一个响应对象。这时,忽略它就好了。
要关闭一个请求,您需要在请求后的调用函数(由 [process_response()](# "flask.Flask.process_response")函数激发)运行之前耍一些小小的把戏:
~~~
>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()
~~~
被注册为 [teardown_request()](# "flask.Flask.teardown_request") 的函数将会在上下文环境出栈之后自动执行。所以这是用来销毁请求上下文(如数据库连接等)资源的最佳地点。
### 进一步提升 Shell 使用体验
如果您喜欢在 Shell 里实验您的新点子,您可以创建一个包含你想要导入交互式回话中的东西的的模块。在这里,您也可以定义更多的辅助方法用来完成一些常用的操作,例如初始化数据库、删除一个数据表等。
把他们放到一个模块里(比如 shelltools 然后在 Shell 中导入它):
~~~
>>> from shelltools import *
~~~
© 版权所有 2013, Armin Ronacher.
- 欢迎使用 Flask
- 前言
- 给有经验程序员的前言
- 安装
- 快速入门
- 教程
- 介绍 Flaskr
- 步骤 0: 创建文件夹
- 步骤 1: 数据库模式
- 步骤 2: 应用设置代码
- 步骤 3: 创建数据库
- 步骤 4: 请求数据库连接
- 步骤 5: 视图函数
- 步骤 6: 模板
- 步骤 7: 添加样式
- 福利: 应用测试
- 模板
- 测试 Flask 应用
- 记录应用错误
- 配置处理
- 信号
- 即插视图
- 应用上下文
- 请求上下文
- 用蓝图实现模块化的应用
- Flask 扩展
- 与 Shell 共舞
- Flask 代码模式
- 大型应用
- 应用程序的工厂函数
- 应用调度
- 使用 URL 处理器
- 部署和分发
- 使用 Fabric 部署
- 在 Flask 中使用 SQLite 3
- 在 Flask 中使用 SQLAlchemy
- 上传文件
- 缓存
- 视图装饰器
- 使用 WTForms 进行表单验证
- 模板继承
- 消息闪现
- 用 jQuery 实现 Ajax
- 自定义错误页面
- 延迟加载视图
- 在 Flask 中使用 MongoKit
- 添加 Favicon
- 数据流
- 延迟请求回调
- 添加 HTTP Method Overrides
- 请求内容校验码
- 基于 Celery 的后台任务
- 部署选择
- mod_wsgi (Apache)
- 独立 WSGI 容器
- uWSGI
- FastCGI
- CGI
- 聚沙成塔
- API
- JSON 支持
- Flask 中的设计决策
- HTML/XHTML 常见问题
- 安全注意事项
- Flask 中的 Unicode
- Flask 扩展开发
- Pocoo 风格指引
- Python 3 支持
- 升级到最新版本
- Flask Changelog
- 许可证
- 术语表