flask-script總結

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

一、安裝

使用pip來安裝:web

pip install Flask-Script

二、示例代碼

示例代碼以下:sql

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). 建立實例
manager = Manager(app): 先建立一個Manager實例。Manager類會跟蹤全部的命令和命令行調用的參數。
2)運行命令
manager.run(): 方法初始化Manager實例來接收命令行輸入。
3)建立自定義命名
建立自定義命令有三種方法:shell

  • 定義Command類的子類
from flask_script import Command

class Hello(Command):
    "prints hello world"

    def run(self):
        print "hello world"
        
#將命令添加到Manager實例:
manager.add_command('hello', Hello())
  • 使用@command裝飾器
@manager.command
def hello():
    "Just say hello"
    print("hello")
  • 使用@option裝飾器
from flask_script import Manager  
from debug import app  
  
manager = Manager(app)  
 
@manager.option('-n', '--name', dest='name', help='Your name', default='world')    
#命令既能夠用-n,也能夠用--name,dest="name"用戶輸入的命令的名字做爲參數傳給了函數中的name
@manager.option('-u', '--url', dest='url', default='www.csdn.com')  #命令既能夠用-u,也能夠用--url,dest="url"用戶輸入的命令的url做爲參數傳給了函數中的url

def hello(name, url):  
'hello world or hello <setting name>'  
    print 'hello', name  
    print url  
  
if __name__ == '__main__':  
    manager.run()

5). 使用
在命令行運行以下命令:數據庫

  • 普通使用

$python manage.py helloflask

hello world
  • 針對使用@option裝飾器的:

python manager.py hello -n sissiy -u www.sissiy.com服務器

hello sissiy
www.sissiy.com

6). 使用shell添加上下文
每次啓動shell會話都要導入數據庫實例和模型,這真是份枯燥的工做。爲了不一直重複導入,咱們能夠作些配置,讓Flask-Script的shell命令自動導入特定的對象。
若想把對象添加到導入列表中,咱們要爲shell命令註冊一個make_context回調函數。app

from flask.ext.script import Shell

def make_shell_context():
    return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", Shell(make_context=make_shell_context))

make_shell_context()函數註冊了程序、數據庫實例以及模型,所以這些對象能直接導入shell:函數

$ python hello.py shell
>>> app
<Flask 'app'>
>>> db
<SQLAlchemy engine='sqlite:////home/flask/flasky/data.sqlite'>
>>> User
<class 'app.User'>
相關文章
相關標籤/搜索