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

英文原文地址: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 *


猜你喜欢

转载自blog.csdn.net/ReganDu/article/details/80269364