Flask Web Development - Flask插件机制&Flask-Script

本节取自part I chapter 2的后半部分,跳过了关于request与response具体交互设计细节内容。主要通过Flask-Script插件让读者对于插件系统有个简单认识。

Flask注重拓展性,社区里已经有很多插件可供选择,当然也可以使用python标准库或者其他的各种库。

Flask-Script

Flask-Script这个插件,是用来增加Flask应用的命令行参数的,它本身自带了一些通用的选项,也支持自定义的命令。这功能可能类似于python标准库中的argparse。

之前提到过,Flask自带一个开发环境用的server,这个server支持一些启动参数配置,但是这些配置只能通过在启动时作为app.run()参数传入。这非常不方便,比较理想的配置方式是通过脚本命令行参数的方式传入。下面通过Flask-Script来实现这个功能。

安装很简单:

$ pip install flask-script

下面给之前写的hello.py脚本增加一些命令行参数,省略了一些代码:

from flask.ext.script import Manager
manager = Manager(app)
# ...
if __name__ == ‘__main__‘: 
    manager.run()

Flask的插件在安装好后,都可以通过flask.ext这个命名空间引入。Flask-Script可以提供一个Manager类,通过flask.ext.script可以引入。

通过向构造器传入应用实例来初始化插件里的实例,比如上面的Manager,这是Flask插件的常用初始化方式。从构造器得到的实例,就可以视情况不同正常使用了。现在应用通过manager.run()启动,命令行参数在此处解析。

注:目前代码是GitHub上的2c版本,切换tag可以查看。

运行hello.py,可以发现现在应用多了一些基本的命令行参数:

$ python hello.py
usage: hello.py [-h] {shell,runserver}...

positional arguments:
    {shell,runserver}
     shell              Runs a Python shell inside Flask application context.
     runserver          Runs the Flask development server i.e. app.run()
optional arguments:
     -h, --help         show this help message and exit

shell命令可以在应用上下文中打开一个Python的shell,你可以在里面处理一些维护任务或测试。

runserver命令可以启动server,默认开始debug模式,还有很多参数可选:

$ python hello.py runserver --help
usage: hello.py runserver [-h] [-t HOST] [-p PORT] [--threaded]
                 [--processes PROCESSES] [--passthrough-errors] [-d]
                 [-r]

Runs the Flask development server i.e. app.run()

optional arguments:
-h, --help       show this help message and exit
-t HOST, --host HOST
-p PORT, --port PORT
--threaded
--processes      PROCESSES
--passthrough-errors
-d, --no-debug
-r, --no-reload

--host参数可以指定server监听的连接,默认监听的localhost(一般是127.0.0.1)。尝试修改:

$ python hello.py runserver --host 0.0.0.0
* Running on http://0.0.0.0:5000/
* Restarting with reloader

现在处于同网络中的任何计算机都可以通过访问http://a.b.c.d:5000来访问这个server,a.b.c.d是运行server的计算机在这个网络中的IP。

注:下次是模板机制的说明,重点!Flask返回的response全靠这个机制。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。