Skip to content

Commit

Permalink
class-based view
Browse files Browse the repository at this point in the history
  • Loading branch information
junkboy0315 committed Feb 8, 2019
1 parent 0c9f284 commit 4585bb6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 14 deletions.
5 changes: 2 additions & 3 deletions tutorial/snippets/urls.py
@@ -1,11 +1,10 @@
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views
from snippets.views import SnippetList
from snippets.views import SnippetList, SnippetDetail

urlpatterns = [
path('snippets/', SnippetList.as_view()),
path('snippets/<int:pk>/', views.snippet_detail),
path('snippets/<int:pk>/', SnippetDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)
25 changes: 14 additions & 11 deletions tutorial/snippets/views.py
@@ -1,8 +1,7 @@
from django.http import Http404
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.views import APIView

from snippets.models import Snippet
from snippets.serializers import SnippetSerializer

Expand All @@ -27,28 +26,32 @@ def post(self, request, format=None):
return Response(serializer.data, status=status.HTTP_201_CREATED)


@api_view(['GET', 'PUT', 'DELETE'])
def snippet_detail(request, pk, format=None):
class SnippetDetail(APIView):
"""
単一のスニペットの、取得・更新・削除を行う。
"""
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)

if request.method == 'GET':
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404

def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data)

elif request.method == 'PUT':
def put(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet, data=request.data)
if not serializer.is_valid():
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
serializer.save()
return Response(serializer.data)

elif request.method == 'DELETE':
def delete(self, request, pk, format=None):
snippet = self.get_object(pk)
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)

0 comments on commit 4585bb6

Please sign in to comment.