Flask 自定义命令 类似于django的manage.py

Flask-Script 扩展

文档: https://flask-script.readthedocs.io/en/latest/

这个模块的作用可以让我们通过终端来控制flask项目的运行,类似于django的manage.py

安装命令:

pip install flask-script

集成 Flask-Script到flask应用中,创建一个主应用程序,一般我们叫manager.py/run.py/main.py都行。 下面的应用名:manager.py

# 自定义脚本命令
#  1. 引入Command命令基类
#  2. 创建命令类必须直接或间接继承Command,并在内部实现run方法,同时如果有自定义的其他参数,则必须实现__init__
#  3. 使用flask_script应用对象manage.add_command对命令类进行注册,并设置调用终端别名。
# option装饰后的作用:可以传递命令参数,通过装饰器manager.command,添加一个命令
from flask import Flask
from flask_script import Manager,Command,Option
import os
app = Flask(__name__)


class Config():
    DEBUG = True


app.config.from_object(Config)
"""基于flask_script创建自定义终端命令"""


class HelloCommand(Command):
    """命令相关的注释"""
    option_list = [
        Option("--name","-n",help='名称'),    # 自定义的命令参数  简写参数  参数的帮助信息
        Option("--qwq","-m",help="大魔王")

    ]
    def run(self,name,qwq):
        print("name=%s" % name)
        print(qwq)
        print("命令执行了!!!")

class BluePrintCommand(Command):
    """ 和django的创建应用app的命令 """
    option_list = [
        Option( '--startapp',"-startapp",help='创建应用app')
    ]
    def run(self, startapp):
        if startapp is None :
            print('文件名不能为空!')
            return
        elif not os.path.isdir(startapp):
            os.mkdir(startapp)
            open("%s/views.py" % startapp,'w')
            open("%s/models.py" % startapp, 'w')
            with open("%s/urls.py" % startapp, 'w') as f:
                f.write("""from . import views
urlpatterns = [

]
""")
            print('创建成功!')
        else:
            print("创建失败!文件名已存在")


# 注册终端脚本工具到app中
manager = Manager(app)
manager.add_command('hello',HelloCommand)   # 自定义的命令名字
manager.add_command('startapp',BluePrintCommand)


@app.route(rule='/')
def qwq():
    return 'ok'


if __name__ == '__main__':
    # 注意,这里不是app对象
    manager.run()

# 端口和域名不写,默认为127.0.0.1:5000
# python manager.py runserver       manager.py 本py文件的名字

# 通过-h设置启动域名,-p设置启动端口
# python manager.py runserver -h127.0.0.1 -p8888



""" 命令显示
(flask) yanmu@yanmu:~/桌面/flask/day02$ python manager.py startapp --startapp=qwq
创建成功!
(flask) yanmu@yanmu:~/桌面/flask/day02$ python manager.py startapp --startapp=qwq
创建失败!文件名已存在
(flask) yanmu@yanmu:~/桌面/flask/day02$ python manager.py hello --name=大魔王 -m=qwq
name=大魔王
qwq
命令执行了!!!
(flask) yanmu@yanmu:~/桌面/flask/day02$ python manager.py runserver -h127.0.0.1 -p9000
 * Running on http://127.0.0.1:9000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 104-532-688
^C(flask) yanmu@yanmu:~/桌面/flask/day02$ python manager.py
usage: manager.py [-?] {hello,startapp,shell,runserver} ...

positional arguments:
  {hello,startapp,shell,runserver}
    hello               命令相关的注释
    startapp            和django的创建应用app的命令
    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
(flask) yanmu@yanmu:~/桌面/flask/day02$ 


"""

Last updated