Djangoメモ(15) : runserver_plusで対話型シェルを使ったデバッグ
A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。
Django Extensions, Werkzeugのインストール
アプリを作成中だがデバッグしやすいようにDjango Extensionsに含まれるrunserver_plus
を使ってみる。
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
という対話型シェルを便利にするコマンドも使える。
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})
データが存在しないページにアクセスすると図のような画面が表示されるようになる。
ここで背景色があるコードをクリックすると周辺コードが表示される。
さらに右端のアイコンをクリックすると対話型シェルが起動するが、PINの入力を要求されるので入力する。
これで対話型シェルが使える状態になる。
ページの最後にdump()
, dump(obj)
が使えるという説明があるので使ってみる。
それぞれを実行した結果。もちろん通常のPythonコードも実行できる。
まとめ
- Django ExtensionsはDjangoの拡張機能を集めたパッケージ
runserver_plus
はエラー発生時に対話型シェルを起動できるdump()
,dump(obj)
で変数一覧、オブジェクト詳細情報を表示