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