Flask_Flask-Script指令碼擴充套件的使用(八)
Flask-Script擴充套件包提供向Flask插入外部指令碼的功能,包括執行一個開發用的伺服器,一個定製的Python shell,設定資料庫的指令碼,cronjobs,及其他執行在web應用之外的命令列任務;使得指令碼和系統分開;
使用Flask-Script擴充套件包前,需要使用下面命令進行安裝
pip install Flask-Script
Flask-Script工作方式和Flask本身類似,只需定義和新增從命令列中被Manager例項呼叫的命令;
官方文件:http://flask-script.readthedocs.io/en/latest/
一、基本運用
首先,建立一個Python模板執行命令指令碼,可起名為manager.py;
在該檔案中,必須有一個Manager例項,Manager類追蹤所有在命令列中呼叫的命令和處理過程的呼叫執行情況;
Manager只有一個引數——Flask例項,也可以是一個函式或其他的返回Flask例項;
呼叫manager.run()啟動Manager例項接收命令列中的命令;
from flask import Flask from flask_script import Manager # 啟動命令的管理類 app = Flask(__name__) # 建立Manager管理類的物件 manager = Manager(app) @app.route("/index/")def index(): return "hello flask" if __name__ == '__main__': # 通過管理物件來啟動flask manager.run()
建立好manager.py檔案後,不能直接通過啟動檔案來執行,需要在系統的命令列中通過命令啟動。
上圖中通過 runserver 命令啟動了服務
上圖中通過shell命令,進入了flask的互動模式。
我們可以通過 --help檢視其它可用命令
並且可以通過 命令+ --help檢視每個命令的可用引數
二、自定義命令
除了 runserver和shell命令,我們還可以建立自定義命令,有三種建立命令的方法:
- 建立Command子類
- 使用Manager例項的@command修飾符
- 使用 Manager 例項的@option修飾符
2.1 建立Command子類
Command子類必須定義一個run方法
舉例:建立Hello命令,並將Hello命令加入Manager例項;
from flask import Flask from flask_script import Manager # 啟動命令的管理類 from flask_script import Command app = Flask(__name__) # 建立Manager管理類的物件 manager = Manager(app) # 1.建立Command子類,並且必須定義一個run方法 class Hello(Command): def run(self): print("hello flask") # 自定義命令 manager.add_command("hello", Hello()) # hello為命令列的啟動命令,Hello()為命令呼叫的類 if __name__ == '__main__': # 通過管理物件來啟動flask manager.run()
執行自定義命令
自定義命令也可以通過 --help檢視
2.2使用Manager例項的@command修飾符
from flask import Flask from flask_script import Manager # 啟動命令的管理類 app = Flask(__name__) # 建立Manager管理類的物件 manager = Manager(app) # 2.使用Command例項的@command修飾符 @manager.command def hi(): print("hi flask") if __name__ == '__main__': # 通過管理物件來啟動flask manager.run()
2.3使用 Manager 例項的@option修飾符
from flask import Flask from flask_script import Manager # 啟動命令的管理類 app = Flask(__name__) # 建立Manager管理類的物件 manager = Manager(app) # 3.使用 Manager 例項的@option修飾符 @manager.option('-n', '--name', dest='name', help='Your name', default='zhangsan') # 解釋: # -n:引數的簡寫 # --name:引數全稱 # dest="name":使用者在引數後的輸入值傳遞給函式中的name # help='Your name':使用--help檢視時的引數解釋 # default='zhangsan':使用者不使用引數時的預設值 @manager.option('-a', '--age', dest='age', help='Your age', default='18') def say(name, age): print(F"{name}:{age}") if __name__ == '__main__': # 通過管理物件來啟動flask manager.run()
參考:https://blog.csdn.net/twc829/article/details/52154214