LoginSignup
0
0

【DRF】 Django rest_frameworkを使って10分で簡単なCRUDを実装してみた

Last updated at Posted at 2024-05-02

はじめに

Djangoのrest_frameworkを使用して簡単にCRUD処理を実装してみたのでその備忘録として書き留めておく。思った以上に書かなくて最低限なら爆速で実装できるので個人的には使いやすい。

1.Djangoやrest_frameworkその他install

requirements.txt
Django==4.2
djangorestframework==3.14.0
mysqlclient
uwsgi

必要なものはrequirements.txtに記載して一括でパッケージやライブラリを追加するやり方を取った。

shell
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を作成

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

config/urls.py
from django.urls import path, include

urlpatterns = [
    path('api/v1/todo/', include('todo.urls')),
]

todo/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('item/', views.TodoList.as_view()),
    path('item/<int:pk>/', views.TodoDetail.as_view()),
]

todo/views.py
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

todo/serializers/TodoSerializer.py
from rest_framework import serializers
from todo.models import Todo

class TodoListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = '__all__'

※serializersフォルダを作成しているが作成しなくてもできる。

todo/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'

※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で削除処理

が行える。

終わりに

書く量少なっ。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0