Django REST frameworkでアプリケーション開発 ~マネジメントコマンド作成編~

こんにちは。KOUKIです。

前回は、カスタムユーザーを作成しました。

今回は、マネジメントコマンドを自作しましょう、と言った話です。

今回もDjango REST frameworkは使用しません(タイトル詐欺ですね)。

記事まとめ

マネジメントコマンドの作成

Djangoには、様々なマネジメントコマンドがあり、”python manage.py –help“で一覧が見れます。

例えば、「python manage.py migrate」と実行するとマイグレーションが実行されますよね?

このようなマネジメントコマンドは、自作することが可能です。

Docker上で「Django+PostgresSQL」を動かす時、データベースのスキーマー形成前にPostgresSQLコンテナが起動するため、エラーが発生することがあります。

この問題を解決しましょう。

DBが完全に起動するまで、ポーリングを投げ続けるコマンドがあればよさそうですね。

参考

フォルダとファイルを作成します。

まずは、テストを書きましょう。

テスト時にはDBに接続したくないので、Mockを利用します。

「test_wait_for_db_ready」は、データベースが起動確認用のテストです。

「django.db.utils.ConnectionHandler.getitem」を呼ぶとDBに接続済みオブジェクトを取得できるので、このオブジェクトを使ってテストをします。

「call_command(‘wait_for_db’)」は、これから作成するwait_for_db.pyを指します。

「test_wait_for_db」は、DBが接続されていないときのマネジメントコマンドの挙動をチェックします。DBに接続できていない時にマネジメントコマンドを実行すると「OperationalError」が発生します。

テストを実行しましょう。

wait_for_db.pyに何も実装していないのでエラーが出力されます。

それでは、実装して見ましょう。

connections[‘default’]にて、Djangoの’default’で設定しているDBを呼びます。

接続に失敗したら「OperationalError」を出すので、接続できるまでWhileループで回し続けます。

テストを実行しましょう。

OKですね。

これで、Docker上で「python manage.py wait_for_db」コマンドを実行すれば、DBが立ち上がるまでポーリングしてくれる仕様に書き換えられますね。

docker-compose.yml修正

docker-compose.ymlに先ほどのマネジメントコマンドを組み込みましょう。

それでは、docker-compose upで立ち上げてみてください。

OKですね。

次回

次回からいよいよDjango REST frameworkを使って、アプリケーション開発を行っていきます。

関連記事

基礎編はこちらです。

Djangoおすすめ書籍

Djangoを学ぶなら以下の書籍がオススメです。

緑 -> 赤 -> 紫の順でやればOKです。読みやすい英語で書かれているので、英語力もついでに上がるかもしれません^^

コメントを残す