
1.5 Flask-Script扩展

为了提高程序的可扩展性,Flask被设计为可扩展形式。正因为如此,Flask没有内置提供一些重要的功能模块,例如常用的数据库操作和用户认证,这样做的好处是开发者可以按需求自行开发。在Flask Web程序中,可以使用扩展来实现数据库操作、用户认证等功能,这样使Flask项目具有极高的可扩展性。
1.5.1 Flask-Script扩展介绍
在运行本章的Flask Web程序时,使用函数run()启动服务器运行Flask Web程序。虽然在函数run()中可以设置运行参数,但是这依旧不是Flask Web程序的最佳运行方法,最佳的运行方法是使用命令行参数。为了更加方便地使用命令行参数运行或控制Flask Web程序,可以考虑使用Flask-Script扩展来提高效率。
Flask-Script是一个典型的Flask扩展,能够为Flask Web程序添加一个命令行解析器。通过使用Flask-Script扩展,可以非常方便地使用命令行格式运行Flask Web程序。Flask-Script自带了一组常用选项,而且还支持自定义命令。
可以通过如下所示的pip命令安装Flask-Script。

使用Flask-Script的主要作用是为了更好地管理项目,通过一个内置的类实例Manager创建管理整个项目的命令行脚本。这样可以在命令行运行Flask Web程序,在程序中可以通过Manager加入不同的Command操作指令,通过操作指令来运行维护整个Flask Web程序。这有点像集成开发好的用户接口,调试工作非常方便。
1.5.2 使用Flask-Script扩展
例如在下面的实例中,演示了使用Flask-Script扩展的过程。实例文件hello.py的具体实现代码如下所示。
源码路径:daima\1\1-5\hello.py

在上述代码中,引用了Flask-Script中的类Manager,使用manager.run()启动Flask服务器,启动后会显示不同的命令行说明。如果在PyCharm中运行上述代码,会输出如下所示的提示信息。

通过上述提示信息可知,输入如下shell命令会显示和CMD一样的命令行界面。

在启动命令行界面后,可以使用Python shell命令运行维护这个Flask Web程序文件。例如根据上面的提示信息,如果输入下面的命令会运行当前的Flask Web程序。

运行Flask Web程序后也会显示启动的服务器的地址和端口号。

1.5.3 创建命令
为了更加精确地调试程序的不同部分,可以使用Flask-Script的类Command创建调试命令。例如在下面的实例中,演示了使用类Command创建调试命令的过程。实例文件mingling1.py的具体实现代码如下所示。
源码路径:daima\1\1-5\mingling1.py


在上述代码中,类Command创建了如下两个自定义命令。
• hello:运行此命令后会调用函数Hello()。
• runserver:运行此命令后会调用函数Server(),启动Flask服务器调试程序。
如果在命令行中输入下面的命令。

运行上述命令后会显示运行函数Hello()后的如下结果。

例如在下面的实例中,演示了使用Command实例的@command修饰符创建命令的过程。实例文件mingling2.py的具体实现代码如下所示。
源码路径:daima\1\1-5\mingling2.py

如果在命令行中输入下面的命令,会显示运行函数Hello()后的结果。

例如在下面的实例中,演示了使用Command实例的@option修饰符创建命令的过程。实例文件mingling3.py的具体实现代码如下所示。
源码路径:daima\1\1-5\mingling3.py

如果在命令行中输入下面的命令,会调用函数hello()显示默认参数的结果。

输入上述命令后的执行结果如下所示。

如果在命令行中输入下面的命令,会调用函数hello()显示指定参数的结果。

输入上述命令后的执行结果如下所示。
