PPP3: Django実践 続き
14-03 データベースのマイグレーション
このへんはチュートリアルで少し見たからだいたいわかる
pub_dateにdefaultの設定がないので、既存のデータはどうするのか?と聞かれてしまいました。1を選ぶと既存のデータにカラムを追記する際のデフォルト値を設定できます。
ん、こんなところで指定しちゃったら再生できなくない?
pythonのコードが修正されるわけではないだろうし
いや、マイグレーションファイルにここでやることも反映されるのかな
きっとそうだな
マイグレーションの機能を使ってデータマイグレーションもできます。データマイグレーションとはデータベーススキーマでなく、データベースに保存されている値を変更する処理のことです。
それは出てこなかったな
○○マスタみたいなのを入れるってことかな
試しにquestionの公開日を一日遅らせるデータマイグレーションを作成してみましょう。
思ってたんと違う?
makemigrations
コマンドの--empty
オプションで空のマイグレーションファイルを作成してそれを編集
日付を進める関数と戻す関数書いてるから何かと思ったら、
更新用の関数とロールバック用の関数か
なるほど
そうやって常にロールバックできるようにするんだな
ちゃんとロールバックのテストもしておかないといざというときに困りそうだ
こうやって作ったマイグレーションファイルも、イチから
データベース作りなおしたりするときにはいっしょに実行されるんだろうね
さっきのデータマイグレーションは自動で統合されなくて
ここでは手動で削除される運命だった
必要な変更なら手動で統合するってことだな
さっきのpub_dateでとりあえず入れた値はやっぱりマイグレーションファイルに反映されてた
からっぽのDBから作り直すときは不要なのでここも手動で修正している
14-04 Djangoで使えるライブラリ
factory_boyはテスト用のフィクスチャーを作成するツール
- 簡単にテストデータを書ける
MyModel.objects.create(name="...", description="...")
などと書くのは面倒- ファクトリークラスを作り、デフォルトの値でモデルのオブジェクトを作成する
- テストしたい値のみ変更して使う
- デフォルト値に依存するテストを書かないようにする
- SubFactoryを使うとForeignKeyの先にあるモデルも作成できる
- 動的な属性値を設定するにはLazyAttributeを使う
- Sequenceで連番が作れる
Django Debug Toolbar
- 表示時間・設定・ヘッダ・SQL・ログなどが見える
Webアプリのデバッグって調査が面倒そうだけど(だからなおさらか)こういうツールが整備されてるのはありがたいんだろうな
pipでインストールしてsettings.pyのINSTALLED_APPS、MIDDLEWARE、INTERNAL_IPSを設定してurls.pyにURLを設定するだけ
リダイレクトのインターセプトもできるのか
これも調べてみたいときがありそう
その他
- Web APIを作成するためのライブラリ django-rest-framework
- 外部サービスでログインできるようにするためのライブラリ python-social-auth
- サムネイル生成・表示用ライブラリ sorl-thumbnail
- 代理ログインの機能を追加するライブラリ django-hijack