Django RESTful API
16567 ワード
0、事前準備
[~] → python3 --version
Python 3.6.5
[~] → pip3 --version
pip 10.0.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
[~] → pip3 install virtualenv
(installing)
[~] → virtualenv --version
16.0.0
1.プロジェクトの作成
|Django REST Frameworkのインストール
(devenv)
→ pip install djangorestframework
| settings.pyのINSTALLED APPSにrest frameworkを追加
api
アプリケーションもINSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api',
]
|モデルの作成
# api/models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=144)
subtitle = models.CharField(max_length=144, blank=True)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '[{}] {}'.format(self.user.username, self.title)
|シリアル化の作成
既存のDjangoを用いたWeb開発では、Django ORMのQuerySetがDjangoテンプレートに渡され、HTMLとしてレンダリングされ、応答として送信される.ただし、RESTful APIではJSONにデータを送信する必要があるため、HTMLとして表示されるDjango templateは使用できません.
したがって,QuerySetをネストされたJSONにマッピングする必要があり,これはSerializerによって完了する.
Serializerの作成
# api/serializers.py
from rest_framework import serializers
from .models import Post
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email')
class PostSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = Post
fields = (
'id',
'title',
'subtitle',
'content',
'created_at',
)
read_only_fields = ('created_at',)
|Viewの作成
# api/views.py
from rest_framework import viewsets
from .serializers import PostSerializer
from .models import Post
from rest_framework import permissions
class PostView(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = (permissions.IsAuthenticated,)
def perform_create(self, serializer):
serializer.save(user=self.request.user)
マッピング# api/urls.py
from django.urls import path, include
from rest_framework.urlpatterns import format_suffix_patterns
from .views import PostView
post_list = PostView.as_view({
'post': 'create',
'get': 'list'
})
post_detail = PostView.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})
urlpatterns = format_suffix_patterns([
path('auth/', include('rest_framework.urls', namespace='rest_framework')),
path('posts/', post_list, name='post_list'),
path('posts/<int:pk>/', post_detail, name='post_detail'),
])
# tutorial/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('api.urls')),
]
|移行作成後に実行
(devenv)
→ python manage.py makemigrations
(devenv)
→ python manage.py migrate
(devenv)
→ python manage.py createsuperuser
(devenv)
→ python manage.py runserver
|実行
localhost:8000/api/posts/1/
Reference
この問題について(Django RESTful API), 我々は、より多くの情報をここで見つけました https://velog.io/@yoonjy1106/Django-RESTful-APIテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol