flask擴展 -- flask-script

Flask-Scropt插件爲在Flask裏編寫額外的腳本提供了支持。這包括運行一個開發服務器,一個定製的Python命令行,用於執行初始化數據庫、定時任務和其餘屬於web應用以外的命令行任務的腳本。python

1. 安裝Flask-Script

(1)用命令pip和easy_install安裝:git

pip install Flask-Script

(2)從github下載最新版本,源碼編譯安裝:github

git clone https://github.com/smurfix/flask-script.git
cd flask-script
python setup.py develop

2. 建立並運行命令行

第一步須要建立一個能夠運行你腳本命令的Python模塊。你能夠隨意命名它。我這裏就以manage.py爲例。web

 在manage.py文件中,須要先建立一個Manager實例。Manager類會跟蹤全部的命令和命令行調用的參數:shell

from flask_script import Manager

app = Flask(__name__)
# configure your app

manager = Manager(app)

if __name__ == "__main__":
    manager.run()

調用manager.run()方法初始化Mnager實例來接收命令行輸入。數據庫

第二步是建立添加自定義命令。建立自定義命令有三種方法:flask

  • 定義Command類的子類
  • 使用@command裝飾器
  • 使用@option裝飾器

(1) 定義Command類的子類服務器

爲了簡單,咱們就建立一個hello命令來輸出「hello world」:app

from flask_script import Command

class Hello(Command):
    "prints hello world"

    def run(self):
        print "hello world"

接下來咱們須要把命令添加到Mannager實例:ide

manager.add_command('hello', Hello())

完整代碼以下:

from flask_script import Manager,Command
from flask import Flask
app = Flask(__name__)

manager = Manager(app)

class hello(Command):
    "prints hello world"
    def run(self):
        print("hello world")

manager.add_command('hello', hello())

if __name__ == "__main__":
    manager.run()

 使用:

在命令行運行以下命令:
(1)$python manage.py hello hello world
(2)$python manage.py
usage: manage.py [-?] {hello,shell,runserver} ...

positional arguments:
  {hello,shell,runserver}
    hello               prints hello world
    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

也能夠經過把包含Command實例的字典做爲manager.run()的參數:
manager.run({'hello' : Hello()})

(2)使用@command裝飾器

 對於簡單的命令,咱們能夠使用屬於Manager實例的@command裝飾器。

@manager.command
def hello():
    "Just say hello"
    print("hello")

其使用方法和前面同樣。

 (3)使用@option裝飾器

如何須要經過命令行進行比較複雜的控制,能夠使用Manager實例的@option裝飾器。

@manager.option('-n', '--name', help='Your name')
def hello(name):
    print("hello", name)
相關文章
相關標籤/搜索