一、安裝和使用
Flask_script是Flask擴展庫的一部分,只需通過pip安裝即可。
pip install flask-script
安裝後,只需在Flask應用程序中導入並附加它即可使用,如下所示:
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
if __name__ == '__main__':
manager.run()
該Manager類處理我們在使用終端運行Flask應用程序時所需的所有命令,例如啟動服務器、創建數據庫,甚至在數據庫中插入模擬數據。
二、創建自定義命令
可以自定義命令,如生成fake數據、構建數據庫等。 使用裝飾器 @manager.command 把某個函數標記為需要的調用命令。 如下所示,為了使用該命令,可以在命令行中鍵入 python run.py hello,並且會看到 「Hello, world!」 的回復。
@manager.command
def hello():
print("Hello, world!")
三、參數傳遞
命令可能需要進一步處理傳遞給它們的參數。為此,我們必須在函數和裝飾器 @manager.option/argument 之間定義它們,並使用多個函數參數接收它們。如果只想要傳遞一個參數,則使用裝飾器 @manager.option ,否則使用 @manager.argument 。
下面的示例使用選項和參數來處理一個字符串和兩個整數的輸入:
@manager.command
@manager.option('--string', '-s', dest='string', default="Hello world!")
@manager.argument('integer1', type=int)
@manager.argument('integer2', type=int)
def process_arguments(integer1, integer2, string):
print("String: %s" % string)
print("Integer1: %d" % integer1)
print("Integer2: %d" % integer2)
上述代碼為每個參數創建了一個獨立的函數參數。@manager.option 的dest參數用於提供選項名稱,要使用 –s 或 –string 表示。type參數可用於指定傳遞的參數類型。
我們可以通過以下方式將下面的參數傳遞給處理爾函數:
python run.py process_arguments --string "Hello!" 3 4
以下是使用flask_script傳遞參數的更多示例情況。
@manager.command
@manager.option('--choice', '-c', dest='choice',
choices=['first', 'second', 'third'])
def process_choices(choice):
print("Choice: %s" % choice)
@manager.command
@manager.option('--flag', '-f', dest='flag', action='store_true')
def process_boolean_flag(flag):
print("Flag: %r" % flag)
四、並行管理
一旦您的應用程序變得複雜且需要發現和處理錯誤,將難以控制所有命令。尤其是如果某些命令需要多次運行,但它們之間相互依賴,則易於在第一次運行一個長命令時引入錯誤。
Flask_script將這些問題消除的一種方法是使用多個管理器,每個管理器負責自己的一組命令。這樣,我們可以讓我們的應用程序跨多個進程運行而不影響任何命令。
如下所示,創建一個新的管理器my_manager,它將通過python run.py –help 查看其他命令。
from flask_script import Manager
my_manager = Manager(usage="Command Line Interface")
@my_manager.command
def my_command():
print("My command!")
五、自擴展命令
除了內置的命令外,我們還可以為我們的應用程序創建自己的擴展命令。這可以通過定義自己的Command類來完成,該類接收繼承自FlaskScript App的應用程序實例並處理所有命令。
例如,我們的自定義命令mywebservice可以通過以下方式定義,並使用my_manager來添加到應用程序中:
from flask_script import Command
class MyWebService(Command):
"""
Serve the web service
"""
def __init__(self, app):
self.app = app
def run(self):
app.run()
然後,我們只需將其添加到可用命令的列表中。
my_manager.add_command('mywebservice', MyWebService(app))
六、總結
這篇文章面向希望有效管理Flask項目的開發人員。 Flask_script確定了容易管理Flask應用程序所需的工具,並提供了使自定義命令和參數處理顯然易於管理的簡單方法。 它允許用戶定義一個高級MyManager,允許命令和管理器在多個進程中並行運行。
原創文章,作者:JENFW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371024.html