kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

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を設定するだけ

リダイレクトのインターセプトもできるのか
これも調べてみたいときがありそう

その他