😺
【Django】Pythonで作るRest API【17Update Post】
【17Update Post】
YouTube: https://youtu.be/zn2_DeYLzFw
今回は「Post」のアップデートのビューを作成します。
myapp/posts/views.py
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.
def helloWorld(request):
# return HttpResponse('Hello World')
hello = 'hello'
return render(request, 'posts/index.html', {})
@api_view(['GET'])
def getAllPosts(request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
@api_view(['POST'])
def createPost(request):
data = request.data
user = request.user
post = Post.objects.create(
title = data['title'],
content = data['content'],
author = user
)
serializer = PostSerializer(post, many=False)
return Response(serializer.data)
@api_view(['GET'])
def getPostById(request, pk):
post = Post.objects.get(id=pk)
serializer = PostSerializer(post, many=False)
return Response(serializer.data)
@api_view(['DELETE'])
def deletePost(request, pk):
post = Post.objects.get(id=pk)
post.delete()
return Response({'message': 'delete success'})
@api_view(['PUT'])
def updatePost(request, pk):
data = request.data
post = Post.objects.get(id=pk)
post.title = data['title']
post.content = data['content']
post.published = data['published']
post.save()
serializer = PostSerializer(post, many=False)
return Response(serializer.data)
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
myapp/posts/url.py
from django.urls import path, include
from .views import helloWorld, PostViewSet, getAllPosts, createPost, getPostById, deletePost, updatePost
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'posts', PostViewSet, basename='posts')
urlpatterns = [
path('hello/', helloWorld, name='hello'),
path('', getAllPosts, name='getAllPosts'),
path('create/', createPost, name='createPost'),
path('<str:pk>/', getPostById, name='getPost'),
path('<str:pk>/delete/', deletePost, name='deletePost'),
path('<str:pk>/update/', updatePost, name='updatePost'),
path('', include(router.urls))
]
パスの追加ができましたら、
ローカルサーバーを起動して
こちらにアクセスしてアップデートのテストを行います。
動画では「id」が「1」となっていますが、
こちらは存在する「Post」の「id」に置き換えてください。
Discussion