Djangoメモ(6) : shell_plusで補完、履歴活用、モデル自動インポート、SQL出力
Django Extensionsのインストール
前回、対話型シェルを操作したがコマンド履歴が使えなかったりと不便だったので調べてみたところDjango Extensionsに含まれるshell_plusを使うのがよさそう。
Django ExtensionsはDjangoの拡張機能を集めたパッケージでpipでインストールできる。
$ pip install django-extensions
今回はpipenvで環境を構築しているので下記コマンドでインストール。
$ pipenv install --dev django-extensions
インストールが完了したら有効にするためにINSTALLED_APPSに追加する。
INSTALLED_APPS = (
...
'django_extensions',
...
)
Django Extensionsにはshell_plusの他にgraph_models, show_urls, validate_templates, runserver_plusといったコマンドも含まれている。
shell_plus
shell_plusは対話型シェルとしてIPython, bpython, ptpythonを指定でき、モデルの自動インポートを可能にする。
3つとも試してみるので下記コマンドでインストール。
$ pipenv install --dev ipython $ pipenv install --dev bpython $ pipenv install --dev ptpython
もし全部が使える状態だと優先度はptpython, bpython, ipython, pythonとなる。
起動するシェルを指定する場合は--ipythonのようにオプションを指定するか、settings.pyにSHELL_PLUSを追加する。
# Always use IPython for shell_plus SHELL_PLUS = "ipython"
3つとも起動時に自動でモデルがインポートされるため、インポート文を入力する必要がなくなり便利。
IPython
IPythonはWikipediaによると「Python に比較して、型推定を強化し、対話的実行のための文法を追加してあり、コード・ハイライティングおよびタブによる補完が行える。」とのこと。
$ python manage.py shell_plus --ipython

bpython
bpythonは軽量でシンタックスハイライト、パラメータリスト表示、オートインデント、補完ができるのが特徴。
$ python manage.py shell_plus --bpython

ptpython
ptpythonは下記記事を参照。
$ python manage.py shell_plus --ptpython

SQL出力
shell_plusではDEBUG = Trueの場合に実行されるSQLを出力することができる。
方法は--print-sqlオプションを指定するか、
$ python manage.py shell_plus --print-sql
settings.pyに下記設定を追加。
# print SQL queries in shell_plus SHELL_PLUS_PRINT_SQL = True

まとめ
- Django ExtensionsはDjangoの拡張機能を集めたパッケージ
shell_plusは対話型シェルとしてIPython, bpython, ptpythonを指定可能shell_plusはモデルを自動インポート--print-sqlでSQLを出力可能