在shell中使用Flask

Python 拥有的交互式 Shell 是人人都喜欢它的一个重要原因。交互式 Shell 允许你实时的运行 Python 命令并且立即得到反馈结果。Flask 本身并未内置一个交互式 Shell ,因为它并不需要任何前台的特殊设置,仅仅导入您的应用 然后开始探索和使用即可。

有些辅助工具可以让你在 shell 中更舒服。交互式控制台回话的一个重要问题是,您并不是像在浏览器当中那样激发一个请求,因此 g 和 request 以及其他的一些函数不能使用。然而您想要测试的代码也许依赖他们, 那么让我们瞧瞧该如何解决这个问题。

这就是该那些辅助函数登场的时候了。然而应当说明的是, 这些函数并非仅仅为在交互式 Shell 里使用而编写的,也可以用于单元测试或者其他需要模拟请求上下文的情景。

一般来说,在阅读本章节之前还是建议大家先阅读 请求上下文 相关章节。

创建一个请求上下文

从 Shell 创建一个合适的上下文,最简单的方法是使用 test_request_context 方法, 此方法会创建一个 RequestContext 类:

>>> ctx = app.test_request_context() 

一般来说,您可以使用 with 声明来激活这个请求对象,但是在终端中,调用 push() 方法和 pop() 方法会更简单:

>>> ctx.push()

从这里往后,您就可以使用这个请求对象直到您调用 pop 方法为止:

>>> ctx.pop()

在请求之前/之后使用 shell

仅仅创建一个请求上下文,您仍然不能运行请求发送前通常会运行的代码。如果您在将连接数据库的任务分配给发送请求前的函数调用,或者在当前用户并没有被储存在 g 对象里等等情况下,您可能无法访问到数据库。

您可以很容易的自己完成这件事,仅仅手动调用 preprocess_request() 函数即可:

>>> ctx = app.test_request_context() >>> ctx.push() >>> app.preprocess_request() 

请注意,preprocess_request() 函数可能会返回一个响应对象。这时忽略它就好了。

要关闭一个请求,您需要在请求后的调用函数(由 process_response() 函数激发)运行之前耍一些小小的把戏:

>>> app.process_response(app.response_class()) <Response 0 bytes [200 OK]> >>> ctx.pop() 

被注册为 teardown_request() 的函数将会在上下文环境改变之后自动执行。所以这是用来销毁请求上下文(如数据库连接等)资源的最佳地点.

进一步提升 Shell 体验

如果你喜欢在 shell 中的感觉,那么你可以创建一个导入有关东西的模块,在模块中还可以定义一些辅助方法,如初始化数据库或者删除表等等

把他们放到一个模块里(比如 shelltools 然后在 Shell 中导入它):

>>> from shelltools import *

转载于:https://www.cnblogs.com/suncunxu/p/11282839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值