はじめに
Djangoのrest_frameworkを使用して簡単にCRUD処理を実装してみたのでその備忘録として書き留めておく。思った以上に書かなくて最低限なら爆速で実装できるので個人的には使いやすい。
1.Djangoやrest_frameworkその他install
Django==4.2
djangorestframework==3.14.0
mysqlclient
uwsgi
必要なものはrequirements.txtに記載して一括でパッケージやライブラリを追加するやり方を取った。
pip install -r requirements.txt
これで指定したパッケージやライブラリの追加が完了する。
2.Djangoのプロジェクトやアプリケーションを作成
1.下記コマンド実行
django-admin startproject config .
※configはお好きな名前をどうぞ
2.下記コマンドを実行
python manage.py startapp todo
※todoはお好きな名前をどうぞ
3.下記コマンド実行
python manage.py makemigrations
4.下記コマンド実行
python manage.py migrate
5.下記コマンド実行
python manage.py collectstatic --noinput
とりあえず一通り実行しておく。
3.models.pyを作成
from django.db import models
class Todo(models.Model):
title = models.CharField(max_length=100)
detail = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'todo'
db_tableでテーブル名を指定することが可能。
models.pyの記述ができたら下記コマンドを実行する。
python manage.py makemigrations
その後下記コマンドを実行する。
python manage.py migrate
これでテーブル作成が完了する。
次章「4」が本題。
4.rest_frameworkでCRUD処理実装
主に5ファイルで完結する。
・ urls.py ← configフォルダ
・ urls.py ← todoフォルダに新規で作成
・ views.py
・ TodoSerializer.py ← これは自分で作成
・ models.py ← 3章で作成したmodels.py
from django.urls import path, include
urlpatterns = [
path('api/v1/todo/', include('todo.urls')),
]
from django.urls import path
from . import views
urlpatterns = [
path('item/', views.TodoList.as_view()),
path('item/<int:pk>/', views.TodoDetail.as_view()),
]
from rest_framework import generics
from .models import Todo
from .serializers import TodoSerializer
class TodoList(generics.ListCreateAPIView):
queryset = Todo.objects.all()
serialzier_class = TodoSerializer.TodoListSerializer
class TodoDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Todo.objects.all()
serializer_class = TodoSerializer.TodoListSerializer
from rest_framework import serializers
from todo.models import Todo
class TodoListSerializer(serializers.ModelSerializer):
class Meta:
model = Todo
fields = '__all__'
※serializersフォルダを作成しているが作成しなくてもできる。
from django.db import models
class Todo(models.Model):
title = models.CharField(max_length=100)
detail = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'todo'
※3章で作成したmodels.pyを使用する。特に変更点はなし。
5. URLにアクセス
これでローカル環境であれば下記にアクセスする。
※個人的に作成したdocker環境で自分は実行した。
http://localhost/api/v1/todo/item/
上記URLにアクセスをすると
・ GETは全件取得処理
・ POSTは登録処理
が行える。
http://localhost/api/v1/todo/item/2/
idが2のレコードがあることがまず前提。
上記URLにアクセスをすると
・ GETで詳細取得処理(今回でいうとidが2のレコード情報)
・ PUTで更新処理
・ DELETEで削除処理
が行える。
終わりに
書く量少なっ。。。