1.集成Python shell
每次自動shell會話都要導入數據庫實例和模型,很煩人。
為了避免一直重復導入,
我們可以做些配置讓Flask-Script的Shell命令自動導入特定的對象。
若想把對象添加到導入列表中,我們要為shell命令注冊一個make_context回調函數
例子:
hello.py: 為shell命令添加一個上下文
from flask_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))
可能錯誤提示:
TypeError: <flask_script.commands.Shell object at 0x000000000478E908>: 'dict' object is not callable
是因為多寫了括號,讓定義的 make_ shell context 函數直接執行了
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'>
2.補充
(1)shell作用
shell 是個好東西,在平時需要手動做一些應用的操作的時候,Flask 的 Shell 簡直是神助攻,尤其是當需要查找一個 Model 的數據的時候更爽了。
Flask-Script 的 Shell 其實就是一個加載了 Flask 應用上下文的交互式環境,通過 shell, 我們可以像啟動應用一樣操作動態數據。
簡單說:方便自己調試!
(2)make_context
作用:
在啟動的 shell 中添加默認的變量,例如上面添加了 db、User 這些,也就是說在啟動 shell 之后就可以直接像訪問默認函數/變量一樣直接用,不用自己導入對象。
比如可以直接查詢數據庫:
db.User.query.all()
如果不加這個 make_context
參數的話,還得麻煩的自己導入:
from application.app import db
db.User.query.all()
簡單說:不用自己導入對象(如數據庫模型等)!