flask-script

flask-script

我们启动flask项目可以通过执行程序app.run()来启动,而flask_script可以帮助我们通过脚本命令的形式启动项目。

不过要注意,flask_script是第三方模块,flask兼容版本需要注意,可以参照以下的版本对应,也可以上网查找对应的版本兼容:

Flask==2.2.2
Flask_Script==2.0.3

基本使用

## manage.py中
from flask_script import Manager
# 用Manager包裹一下app
manager=Manager(app)
manager.run()

# 在终端中使用命令启动
python manage.py runserver

上述代码是对启动项目命令的基本使用,我们还可以自定制命令。

自定义命令

简单自定制命令

@manager.command
def custom(arg):
    print(arg)
    
# 使用自定制命令
python manage.py custom
python manage.py custom xxx    # 可以传入参数

自定制命令可以应用开机自启的一些任务,比如说,每次启动项目,我们想将celery的worker和beat也顺带启动,那么就可以在这里进行。

ps:这里简单补充一下:启动worker、beat使用命令行的形式启动的,那么我们可以用subprocess模块去执行

复杂自定制命令

@manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
    print(name, url)
    
# 使用复杂自定制命令
python manage.py cmd -n leethon -u xxx
python manage.py cmd --name leethon --url uuu

manager.option('-n', '--name', dest='name')传入的参数分别代表(短关键字、长关键字、反正就是各种关键字、dest='对应形参名')

flask-cli

使用场景

Flask-CLI 用于管理 Flask 应用程序中的自定义命令,适用于以下使用场景:

某些情况下,在创建服务之前,需要进行一些准备工作。与应用程序初始化中的 init_app 不同,这些工作通常需要访问应用程序的环境,但不直接影响服务的运行。例如,初始化 MySQL 连接池、Redis 连接池等。尽管每个应用程序可能都会使用自己的 MySQL 和 Redis 服务,但有时只需要进行一次操作,比如创建数据表或执行数据库迁移,而不是每次启动应用程序都需要执行这些操作。

应用程序初始化和 Flask-CLI 的使用是针对不同需求而设计的。
应用程序初始化关注于设置应用程序的基础配置和服务,确保应用程序正常运行。
而 Flask-CLI 适用于在应用程序运行期间执行预处理任务、管理自定义命令、容器化部署以及实现环境隔离等需求。

  1. 预处理工作(Pre-processing Tasks):有些情况下,你需要在服务实际启动之前执行一些准备工作。这可能包括数据库迁移、数据表创建等任务。这些任务依赖于应用程序的环境,但不直接影响服务的运行。
  2. 自定义命令(Custom Commands):Flask-CLI 允许你定义自己的命令,以便在终端中执行特定任务。这些命令可以用于数据导入、数据清理、自动化操作等,使开发者能够更轻松地管理应用程序的各个方面。
  3. 容器化部署(Containerized Deployment):在容器化部署中,应用程序可能位于容器的特定路径下,而不是工作目录。通过设置 FLASK_APP 环境变量,可以更轻松地指定应用程序位置,从而在容器中运行 Flask-CLI 命令。
  4. 灵活的环境隔离(Flexible Environment Isolation):Flask-CLI 提供了一种方式来隔离命令的执行环境。你可以在不同的环境中运行命令,如开发环境、测试环境和生产环境,而不会影响应用程序的正常运行。

这两者共同为开发者提供了更灵活和高效的开发和管理方式。根据具体情况,你可以在应用程序初始化中设置基础环境,并在 Flask-CLI 中处理其他非直接服务相关的任务。

使用方式

以下是使用 Flask-CLI 的几种方式:

自动处理

首先,确保应用程序的脚本文件命名为 app.py,并在脚本中使用 Flask() 创建应用对象,并将其命名为 app。然后,执行以下命令:

python -m flask command

这将自动寻找当前目录下的 app.py 文件,并执行其中注册的 CLI 指令。

指定应用程序脚本

除了自动处理外,你还可以通过以下方式加载特定脚本中的应用程序环境和命令:

python app_script.py command

这种方法适用于那些应用程序脚本命名不是 app.py,但仍需要在其中定义应用对象和 CLI 命令的情况。

使用环境变量 FLASK_APP

你还可以通过设置环境变量 FLASK_APP 来指定应用程序的位置。例如:

export FLASK_APP=api.server:app

这对于容器化部署非常有用。在容器中,应用程序可能不在工作目录下。设置了 FLASK_APP 环境变量后,每次执行以下命令时:

python -m flask command

系统会查找指定的应用程序变量作为 Flask 应用,并执行相应的命令。这样,你就无需每次都输入完整的应用程序路径。

posted @ 2023-04-07 20:37  leethon  阅读(23)  评论(0编辑  收藏  举报