Flask1.0.2系列(十九) 在Shell下工作

本文介绍了如何在Flask应用中使用交互式Shell,包括创建请求上下文、发送请求前后处理程序等技巧,并提供了一些增强Shell体验的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

英文原文地址:http://flask.pocoo.org/docs/1.0/shell/

若有翻译错误或者不尽人意之处,请指出,谢谢~


        (新增于版本0.3。)

        很多人喜欢Python的原因之一是其有用交互式shell。shell允许你实时地执行Python命令并且立即会得到一个返回结果。Flask本身不包含一个交互式shell,因为它不需要预先设置任何特定的设置,仅仅导入你的应用程序并且开始运行即可。

        有一些方便的助手可以使你在shell中获取一个更愉快的体验。交互式控制台会话的最大问题在于,你没有像浏览器一样触发一个请求,这意味着grequest以及其他东西你都无法使用。但是有些测试代码可能是依赖于它们的,因此,你该怎么做呢?

        这里有一些有用的帮助方法。请记住,这些方法不仅仅能被交互式shell使用,也能被单元测试以及其他需要伪造请求上下文的情境下使用。

        通常,我们推荐你先阅读请求上下文章节。


1. 命令行接口

        从Flask0.11开始,要使用shell,我们推荐使用flask shell命令,它能够自动为你做一系列与之相关的事。举个栗子,shell会自动使用加载的应用程序上下文进行初始化。

        更多细节请参阅命令行接口一章。


2. 创建一个请求上下文

        通过shell创建一个适当的请求上下文最简单的方式是,通过使用test_request_context函数,它能创建一个RequestContext

>>> ctx = app.test_request_context()

        通常,你可以使用with语句来激活这个请求对象,但是在shell中,可以更简单地手动使用push()pop()函数:

>>> ctx.push()

        从这时候开始,你可以一直使用请求对象,直到你调用pop:

>>> ctx.pop()


3. 发送Before/After请求

        仅仅是创建一个上下文请求,你仍然不能运行通常运行在请求之前的代码。如果你在请求之前的回调中连接数据库,或者当前用户没有存储在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_reqeust()的方法将会被自动调用。因此这个是一个不错的地方,用来自动销毁请求上下文需要的资源(比如数据库连接)。


4. 进一步改进Shell体验

        如果你喜欢在shell中进行试验,那就创建一个模块,里面有你想要在交互式会话中导入的东西。你也可以在这里定义一些有帮助的方法,比如初始化数据库,删除表等等。

        将它们写入一个模块(比如shelltools)并且从这里导入这个模块:

>>> from shelltools import *


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值