小村のポートフォリオサイト開発(12) DjangoRestFramework はてなブログの記事 論理削除対応

  • こんばんは、小村だよ!

  • 下記のポートフォリオサイトを構築していくよ

  • 前回はてなブログ記事をすべてDBに書き込むことに成功しました

  • 今回は論理削除対応と銘打って進めていきます



目次

  1. 削除日時を追加
  2. 削除日時を入れる処理追加



記録

削除日時を追加

  • 自前のDBはバックアップとしての機能も期待しています。

  • そのため、はてなブログの記事が消えたとしても、削除はしません

  • そのかわりに、削除されていたら削除日を更新して記事の表示はしないようにします

  • ではまずmodelに削除日を用意しましょう

  • 追加した後のマイグレーションファイルは下記のようになりました

f:id:kom314_prog:20210828092700p:plain



削除日時を入れる処理追加


f:id:kom314_prog:20210828105053p:plain
f:id:kom314_prog:20210828105130p:plain
  • まずはviews

  • 取込処理をしているなかで存在するhatena_entry_idを蓄え、最後になければdeleteかけてます

  • ここは特に問題ないですね


f:id:kom314_prog:20210828105522p:plain
f:id:kom314_prog:20210828105550p:plain
  • 本題のmodels

  • あらたにQuerySetModelManagerの概念が加わってます。

  • こちら業務で使ってますが詳しくは調べたことないのであとで調べてみますね

  • 動作としては

    • delete()を実行すると論理削除する

    • delete_hard()を実行すると物理削除する

    • Entry.objectsでデータを覗くと論理削除データは省かれる

    • Entry.entireでデータを覗くと論理削除データも含む

  • という動きになります。どちゃくそ便利!



動作確認

f:id:kom314_prog:20210828112054p:plain
f:id:kom314_prog:20210828112129p:plain


  • そしたらはてなブログで記事を消して、ふたたび取り込みます

  • 再取り込み後のデータが下記。ちゃんと削除日時が入ってますね!

f:id:kom314_prog:20210828112540p:plain



DjangoQuerySetModelManagerについて

  • Modelsで出てきたQuerySetModelManagerについて調べてみます

  • 業務で使ってるのでなんとなくは使えてますが、改めて意味を調べてみます


Manager

  • 参考:Django ドキュメント マネージャ

  • 今までなんとなしにEntry.objects.all()とかでデータを取得できてたのはこのManagerのおかげ

  • デフォルトでobjectsにアクセスした際、動くようになっているようですね。

  • 今回のようにentireの中でManagerを入れると、Entry.entireでアクセスできるようになります。

  • そうしてアクセスした際の動きを、下記のQuerySetなどで制御するようですね。


QuerySet

  • 参考:Django ドキュメント QuerySet

  • QuerySetは実際にDBにアクセスせずにデータを加工したりする仕組みのようです。へー!

  • models.QuerySetが用意されていて、その中に基本のgetやfilterやexcludeなどが用意されてます

  • そのうえで、今回のような決まりきった削除などの更新処理も定義できるようですね。

  • DBにアクセスする際の抽出条件や処理条件を定義する役目ということでしょうね。



おわりに

  • 論理削除の処理と合わせて、Djangoの基礎知識についても知れました

  • 上記記事について熟読ができてないので、改めて後で読んでみようと思います。

  • 次は、APIの返り値の設定をしていきたいと思います。

  • ではでは、ちゃお~~~!