# Create the project directory
mkdir tutorial
cd tutorial
# Create a virtual environment to isolate our package dependencies locally
python3 -m venv env
source env/bin/activate # On Windows use `env\Scripts\activate`
# Install Django and Django REST framework into the virtual environment
pip install django
pip install djangorestframework
# Set up a new project with a single application
django-admin startproject tutorial . # Note the trailing '.' character
cd tutorial
django-admin startapp quickstart
cd ..
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework import permissions
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
from django.db import models
class Members(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField(max_length=60)
phone = models.IntegerField()
date = models.DateTimeField(auto_now_add=True)
#auto_now_addはレコードの作成した日と時間のみ記録する
モデルをシリアル化する
では、このmembersモデルをAPIにするための作業を行います。
Membersディレクトリ内にserializers.pyを作成します。
from rest_framework import serializers
from .models import Members
class MembersSerializer(serializers.Serializer):
name = serializers.CharField(max_length=30)
email = serializers.EmailField(max_length=60)
phone = serializers.IntegerField()
date = serializers.DateTimeField()
class Meta:
model = Members
# fields = ['name', 'email', 'phone', 'date']
fields = '__all__'
from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Members
from .serializers import MembersSerializer
class MemberList(APIView):
def get(self, request, format=None):
members = Members.objects.all()
serializer = MembersSerializer(members, many=True)
return Response(serializer.data)