もた日記

くだらないことを真面目にやる

Djangoメモ(6) : shell_plusで補完、履歴活用、モデル自動インポート、SQL出力

Python 3.6.4 Django 2.0.2

Django Extensionsのインストール

前回、対話型シェルを操作したがコマンド履歴が使えなかったりと不便だったので調べてみたところDjango Extensionsに含まれるshell_plusを使うのがよさそう。

github.com

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.pySHELL_PLUSを追加する。

# Always use IPython for shell_plus
SHELL_PLUS = "ipython"

3つとも起動時に自動でモデルがインポートされるため、インポート文を入力する必要がなくなり便利。


IPython

github.com

IPythonはWikipediaによると「Python に比較して、型推定を強化し、対話的実行のための文法を追加してあり、コード・ハイライティングおよびタブによる補完が行える。」とのこと。

$ python manage.py shell_plus --ipython

f:id:wonder-wall:20180307215235p:plain


bpython

github.com

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

$ python manage.py shell_plus --bpython

f:id:wonder-wall:20180307215246p:plain


ptpython

github.com

ptpythonは下記記事を参照。

wonderwall.hatenablog.com

$ python manage.py shell_plus --ptpython

f:id:wonder-wall:20180307215257p:plain


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

f:id:wonder-wall:20180307220534p:plain


まとめ

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