Flask_script擴展調用的方式

Flask中flask-script擴展的使用

經過使用Flask-Script擴展,咱們能夠在Flask服務器啓動的時候,經過命令行的方式傳入參數。而不單單經過app.run()方法中傳參python

Flask-Script擴展提供向Flask插入外部腳本的功能。包括運行一個開發用的服務器,一個定製的 Python shell,設置數據庫的腳本, 以及其餘的運行在web應用以外的命令行任務。nginx

Flask-Script和Flask自己的工做方式相似。只須要定義和添加能從命令行中被Manager實例調用的 命令便可。web


from flask import Flask
from flask_script import Manager app = Flask(__name__) manager = Manager(app)
@manager.command def hello(): print "hello" if __name__ == "__main__": manager.run()

只要像上面同樣定義你本身的命令腳本,就能夠在命令行中以下調用他們:sql

 python 文件名.py  函數名shell

python manage.py hello > hello 

 

安裝Flask-Script

pip install Flask-Script

 

Manager只有一個參數:一個Flask實例。數據庫

其次,建立而且加入命令。有三種方法可建立命令:flask

  • 建立Command的子類
  • 使用 @command 修飾符
  • 使用 @option 修飾符

下面是一個簡單的例子,建立一個Hello命令,該命令只是簡單的輸出「hello word」。ruby

from flask.script import Command class Hello(Command):  def run(self): print "hello world" 

再把上面建立的Hello命令加入Manager實例:bash

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

如今執行下面的命令:服務器

python manage.py hello > hello world 
 

第一種方法是最適用的,但也是最麻煩的。對於簡單的命令,只須要使用Command實例的@command修飾符。

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

這種方法建立的命令的運行方式和Command類建立的運行方式是相同的。

第三種方式@option修飾符適用於更精細的命令行控制:python manage.py hello > hello

@manager.option('-n', '--name', help='Your name') def hello(name): print "hello", name 

增長命令行參數

大多數命令都帶有參數。仍是上面的例子,若是不單單是打印"hello world",還想輸出一個額外的名字,如:

python manage.py hello --name=Joe hello Joe 
 

爲實現這一功能,須要使用Command類的option_list屬性。

from flask_script import Command, Manager, Option class Hello(Command): option_list = ( Option('--name', '-n', dest='name'), ) def run(self, name): print "hello %s" % name 

 

另外一種方法是爲你的Command類定義一個get_options方法,這將在但願依賴運行實例返回值來獲得參數時很是有效。

class Hello(Command): def __init__(self, default_name='Joe'): self.default_name=default_name def get_options(self): return [ Option('-n', '--name', dest='name', default=self.default_name), ] def run(self, name): print "hello", name 

若使用@command修飾符,參數將直接自動的從函數的參數中獲取:

@manager.command def hello(name): print "hello", name > python manage.py hello Joe hello Joe

調用方法以下:

> python manage.py hello --name=Joe hello Joe 

或者:

> python manage.py hello -n Joe hello Joe 

 

-n 是由參數的第一個字母決定的。因此"name" > "-n"

其次,-h選項一般輸出命令的幫助文檔,因此避免使用h開頭的參數。

 

@command修飾符隨便簡單好用,但在複雜狀況下,@option是更好的選擇:

@manager.option('-n', '--name', dest='name', default='joe') def hello(name): print "hello", name 

能夠增長更多的選項參數:

@manager.option('-n', '--name', dest='name', default='joe') @manager.option('-u', '--url', dest='url', default=None) def hello(name, url): if url is None: print "hello", name else: print "hello", name, "from", url 

能夠這樣調用:

> python manage.py hello --name=Joe --url=reddit.com   hello Joe from reddit.com
相關文章
相關標籤/搜索