Agile育成ブログ
未来を変える喜びを
Django Rest Framework

Django REST Framework [ブログ]


Warning: count(): Parameter must be an array or an object that implements Countable in /home/xs638785/agile-software.site/public_html/wp-content/plugins/rich-table-of-content/functions.php on line 490

バックエンドは Django REST Framework を使用して API サーバーを構築します。

フロントエンドは Next.js と TailwindCSS を使用します。

requirements.txt

Django~=3.1.7
django-cors-headers~=3.4.0
djangorestframework~=3.11.1
Pillow==8.1.2

settings.py

import os   

 'app', # 追加
    'rest_framework', 
    'corsheaders',

# MIDDLEWAREに追加
'corsheaders.middleware.CorsMiddleware',

# 追加 localhost:3000からのアクセスを許可します
CORS_ORIGIN_WHITELIST = [
    "http://localhost:3000",
]

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'


MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

アプリケーション作成

python3 manage.py startapp app

管理ユーザー作成

python3 manage.py createsuperuser

モデル作成

from django.db import models


class Post(models.Model):
    title = models.CharField('タイトル', max_length=50)
    image = models.ImageField(upload_to='images', verbose_name='イメージ画像')
    content = models.TextField('本文')
    created_at = models.DateTimeField('作成日', auto_now_add=True)

    def __str__(self):
        return self.title

管理画面

Post モデルを管理画面で操作できるようにPostモデルをインポートします。

from django.contrib import admin
from .models import Post

admin.site.register(Post)
(myvenv) ~$ python3 manage.py makemigrations
(myvenv) ~$ python3 manage.py migrate

ルーティング設定

プロジェクト

from django.contrib import admin
from django.urls import path, include

from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('app.urls')),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

アプリケーション

from django.urls import path
from app import views


urlpatterns = [
    path('post/', views.PostView.as_view(), name='post'),
    path('post/<str:pk>/', views.PostDetailView.as_view(), name='post-detail'),
]

serializers.py

from rest_framework import serializers
from .models import Post


class PostSerializer(serializers.ModelSerializer):
    created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M")

    class Meta:
        model = Post
        fields = ('id', 'title', 'image', 'content', 'created_at')

views

from rest_framework import generics
from .serializers import PostSerializer
from .models import Post


class PostView(generics.ListAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer


class PostDetailView(generics.RetrieveAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

You cannot copy content of this page