もた日記

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

Djangoメモ(15) : runserver_plusで対話型シェルを使ったデバッグ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。


Django Extensions, Werkzeugのインストール

アプリを作成中だがデバッグしやすいようにDjango Extensionsに含まれるrunserver_plusを使ってみる。

github.com

Django ExtensionsはDjangoの拡張機能を集めたパッケージでpipでインストールできる。
runserver_plusを使用するにはWerkzeug(ドイツ語で工具、道具という意味)というWSGI Webアプリケーションライブラリが必要なので併せてインストールする。

$ pip install django-extensions Werkzeug

今回はPipenvで環境を構築しているので下記コマンドでインストール。

$ pipenv install --dev django-extensions Werkzeug

インストールが完了したら有効にするためにINSTALLED_APPSに追加する。

INSTALLED_APPS = (
    ...
    'django_extensions',
    ...
)

なお、Django Extensionsではshell_plusという対話型シェルを便利にするコマンドも使える。

wonderwall.hatenablog.com


runserver_plusの使い方

runserver_plusは普段使用しているrunserverコマンドをrunserver_plusコマンドに置き換えれば使える。 起動するとDebugger PINが表示されるが後で使うので覚えておく。

$ python manage.py runserver_plus 0:3000
 * Running on http://0:3000/ (Press CTRL+C to quit)
 * Restarting with stat
Performing system checks...

System check identified no issues (0 silenced).

Django version 2.0.2, using settings 'myproject.settings'
Development server is running at http://0:3000/
Using the Werkzeug debugger (http://werkzeug.pocoo.org/)
Quit the server with CONTROL-C.
 * Debugger is active!
 * Debugger PIN: XXX-XXX-XXX


例えば以下のようなビュー関数があったとして、

def board_topics(request, pk):
    board = Board.objects.get(pk=pk)
    return render(request, 'topics.html', {'board': board})

データが存在しないページにアクセスすると図のような画面が表示されるようになる。

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

ここで背景色があるコードをクリックすると周辺コードが表示される。

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

さらに右端のアイコンをクリックすると対話型シェルが起動するが、PINの入力を要求されるので入力する。

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

これで対話型シェルが使える状態になる。

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

ページの最後にdump(), dump(obj)が使えるという説明があるので使ってみる。

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

それぞれを実行した結果。もちろん通常のPythonコードも実行できる。

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


まとめ

  • Django ExtensionsはDjangoの拡張機能を集めたパッケージ
  • runserver_plusはエラー発生時に対話型シェルを起動できる
  • dump(), dump(obj)で変数一覧、オブジェクト詳細情報を表示