💾

Django NinjaでCRUD処理

2024/03/31に公開

今回はDjango NinjaでCRUD処理を実装していきます。
前回の記事では、GETメソッドをPOSTメソッドを実装しました。
https://zenn.dev/keita_f/articles/c8ddbe7fe10ef8
これらに加え、今回はPUTメソッドとDELETEメソッドも追加していきます。

PUTメソッド

全体のコードは以下の通りです。

コード全体
backend/press_sys/api.py
from django.shortcuts import get_object_or_404

@router.put('/article/{id}', response = ArticleOut)
def update_article(request, id: int, payload: UpdateArticle):
  article = get_object_or_404(Article, id = id)
  for attr, value in payload.dict().items():
    setattr(article, attr, value)
  article.save()
  return article

Djangoモデルで定義したArticleをidを指定して特定します。
idの指定は、pathパラメータとして渡します。
Djangoにもともと用意されているget_objects_or_404メソッドを使用して、指定したidに合致するArticleを取得しています。
そして、辞書化したオブジェクトからitemを一つずつ取り出し、setattr()関数を使用して、articleオブジェクトの属性を動的に設定しています。
setattr()関数は以下のような書き方で3つの引数を取ります。

setattr(オブジェクト, 追加したい属性,)

第1引数は対象のオブジェクトで、第2引数は追加したい属性名、第3引数はその属性に設定する値です。
ここでは、attr変数はkeyに、value変数は値に対応しています。
上記のように更新する値を渡せるように設定したならば、saveメソッドでarticleを保存します。
最後に、更新後のarticleを返しています。

DELETEメソッド

コード全体
backend/press_sys/api.py
@router.delete('/article/{id}')
def delete_article(request, id: int):
  article = get_object_or_404(Article, id = id)
  article.delete()
  return {'message': 'success'}

deleteも他のAPIと同様に、get_object_or_404を使用し、idに紐づくarticleを取得し、deleteメソッドで削除しています。
delete後は返せる値がないので、messageとして成功したことを返しています。

以上でDjango Ninjaを使用したCRUD処理の基本が完了です。
次回は、認証処理を実装していく予定です。

Discussion