Flask script 內的Shell 類 使用


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()

簡單說:不用自己導入對象(如數據庫模型等)!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM