文章目录

在第一章关于Flask简介中就有提到过Flask很多高级功能都要通过扩展实现,这一节就来介绍一个Flask扩展,Flask-Script。这个扩展为Flask程序添加了一个命令行解析器,并自带了一组常用选项,它还支持自定义命令。

Flask的开发服务器支持很多启动设置选项,但只能在脚本中作为参数传给app.run()函数,例如域名和端口。这些每次当你想修改这些参数时,都要在代码中修改,十分麻烦。我们可以使用命令行参数传递设置选项,即在运行服务器前在命令行中传入参数。这个时候,我们就要用到Flask-Script。

首先来安装它:

1
(venv) $ pip install flask-script

现在我们要把这个命令行解析功能添加到我们的程序中,打开hello.py,修改如下:

1
2
3
4
5
6
7
8
from flask_script import Manager

manager = Manager(app)

#...

if __name__ == '__main__':
manager.run()

1.Flask-Script有一个Manager类,首先我们就从flask_script里导入Manager类。
2.然后创造一个Manager类的实例,它叫manager,并把程序实例app作为参数传给Manager类的构造函数。注意manager的实例化一定要在app的实例化之后。
3.最后用Manager里的run()函数启动服务器,然后就能解析命令行了。
4.注意,这里创建的manager对象可以在其它各个扩展中使用。

现在我们可以使用一些基本的命令行选项了。我们来运行一下hello.py,它会显出出关于命令行选项用法的消息:

1
2
3
4
5
6
7
8
9
10
(venv) $ python hello.py
usage: hello.py [-?] {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:
-?, --help show this help message and exit

1.首先它告诉我们它的用法就是在python hello.py后面直接加命令。如 python hello.py shell。
2.我们有两个可以用的命令行选项。shell和runserver。shell的作用就是在Flask应用上下文中运行Python shell,runserver就是运行Flask开发服务器:app.run()。
3.如果我们输入–help命令就会显示出帮助菜单。

我们可以试试用shell命令在程序的上下文中启动Python shell会话,我们可以使用这个会话进行维护、测试和调试异常。

1
2
3
(venv) $ python hello.py shell

>>>

然后再来说说runserver这个用来启动服务器的命令。当我们运行python hello.py runserver 时,将会以调试模式启动Web服务器。基于runserver这个命令选项,我们还有很多选项可用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(venv) $ python hello.py runserver --help
usage: hello.py runserver [-?] [-h HOST] [-p PORT] [--threaded]
[--processes PROCESSES] [--passthrough-errors] [-d]
[-D] [-r] [-R]

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

optional arguments:
-?, --help show this help message and exit
-h HOST, --host HOST
-p PORT, --port PORT
--threaded
--processes PROCESSES
--passthrough-errors
-d, --debug enable the Werkzeug debugger (DO NOT use in production
code)
-D, --no-debug disable the Werkzeug debugger
-r, --reload monitor Python files for changes (not 100{'const':
True, 'help': 'monitor Python files for changes (not
100% safe for production use)', 'option_strings':
['-r', '--reload'], 'dest': 'use_reloader',
'required': False, 'nargs': 0, 'choices': None,
'default': None, 'prog': 'hello.py runserver',
'container': <argparse._ArgumentGroup object at
0x10bdd5090>, 'type': None, 'metavar': None}afe for
production use)
-R, --no-reload do not monitor Python files for changes

嗯,真的有很多,我们在这里无法一一去试。之前说过我们可以在运行服务器前在命令行中传入域名和端口等参数,现在我们就来试试。

1
2
(venv) $ python hello.py runserver --host 0.0.0.0
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

‘–host’这个参数用来指定Web服务器监听来自客户端的连接的网络接口。在默认情况下,Flask的开发服务器监听localhost上(即127.0.0.1)的连接,所以只接受来自服务器所在计算机发起的连接。上面这个命令让Web服务器监听公共网络接口上的连接,允许同网中的其它计算机连接服务器。所以,现在Web服务器可以使用http://0.0.0.0:5000/ 网络中的任意一台电脑访问,其中‘0.0.0.0’就是服务器所在的计算机的外网IP地址。

Last: Flask学习教程 Part1 2.2:请求与响应
Next: Flask学习教程 Part1 3.1:用Jinja2渲染模板

文章目录