Flask被设计成可扩展形式,因此并没有提供一些重要的功能,比如数据库和用户认证,所以开发者可以*选择最适合程序的包,或者按需求自行开发。社区成员开发了大量不同用途的扩展,如果这还不能满足需求,你还可使用所有Python 标准包或代码库。为了让你知道如何把扩展整合到程序中,接下来我们将在hello.py 中添加一个扩展,使用命令行参数增强程序的功能。
使用Flask-Script支持命令行选项
Flask 的开发Web 服务器支持很多启动设置选项,但只能在脚本中作为参数传给app.run()函数。这种方式并不十分方便,传递设置选项的理想方式是使用命令行参数。
Flask-Script 是一个Flask 扩展,为Flask 程序添加了一个命令行解析器。Flask-Script 自带了一组常用选项,而且还支持自定义命令
Flask-Script 扩展使用pip 安装:
pip install flask_script
下面的例子显示了把命令行解析功能添加到hello.py 程序中时需要修改的地方
from flask import Flask
from flask.ext.script import Manager
app = Flask(__name__)
manager = Manager(app)
@app.route('/')
def index():
return '<h1>hello,flask</h1>'
if __name__ == '__main__':
manager.run()
专为Flask 开发的扩展都暴漏在flask.ext 命名空间下。Flask-Script 输出了一个名为Manager 的类,可从flask.ext.script 中引入。这个扩展的初始化方法也适用于其他很多扩展:把程序实例作为参数传给构造函数,初始化主类的实例。创建的对象可以在各个扩展中使用。在这里,服务器由manager.run() 启动,启动后就能解析命令行了
运行python hello.py,会出现一下消息
usage: hello.py [-?] {shell,runserver} ...
positional arguments:
{shell,runserver}
shell 在flask应用上下文中运行python shell
runserver 运行flask开发服务器app.run()
optional arguments:
-?, --help 显示帮助信息并退出
顾名思义,runserver 命令用来启动Web 服务器。运行python hello.py runserver 将以调试模式启动Web 服务器,但是我们还有很多选项可用:
usage: hello.py runserver [-?] [-h HOST] [-p PORT] [--threaded]
[--processes PROCESSES] [--passthrough-errors] [-d]
[-D] [-r] [-R] [--ssl-crt SSL_CRT]
[--ssl-key SSL_KEY]
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% safe for
production use)
-R, --no-reload do not monitor Python files for changes
--ssl-crt SSL_CRT Path to ssl certificate
--ssl-key SSL_KEY Path to ssl key
--host 参数是个很有用的选项,它告诉Web 服务器在哪个网络接口上监听来自客户端的连接。默认情况下,Flask 开发Web 服务器监听localhost 上的连接,所以只接受来自服务器所在计算机发起的连接