Skip to content

Commit 5724a93

Browse files
committed
Add support for URL format suffixes
1 parent 3ee53e8 commit 5724a93

15 files changed

+23
-21
lines changed
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

tutorial2/snippets/urls.py

+4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
from django.urls import path
2+
from rest_framework.urlpatterns import format_suffix_patterns
23
from snippets import views
34

45
urlpatterns = [
56
path('snippets/', views.snippet_list),
67
path('snippets/<int:pk>/', views.snippet_detail),
78
]
9+
10+
11+
urlpatterns = format_suffix_patterns(urlpatterns)

tutorial2/snippets/views.py

+19-21
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,49 @@
1-
from django.http import HttpResponse, JsonResponse
2-
from django.views.decorators.csrf import csrf_exempt
3-
from rest_framework.parsers import JSONParser
1+
from rest_framework import status
2+
from rest_framework.decorators import api_view
3+
from rest_framework.response import Response
44
from snippets.models import Snippet
55
from snippets.serializers import SnippetSerializer
66

7-
@csrf_exempt
8-
def snippet_list(request):
7+
8+
@api_view(['GET', 'POST'])
9+
def snippet_list(request, format=None):
910
"""
1011
List all code snippets, or create a new snippet.
1112
"""
1213
if request.method == 'GET':
1314
snippets = Snippet.objects.all()
1415
serializer = SnippetSerializer(snippets, many=True)
15-
return JsonResponse(serializer.data, safe=False)
16+
return Response(serializer.data)
1617

1718
elif request.method == 'POST':
18-
data = JSONParser().parse(request)
19-
serializer = SnippetSerializer(data=data)
19+
serializer = SnippetSerializer(data=request.data)
2020
if serializer.is_valid():
2121
serializer.save()
22-
return JsonResponse(serializer.data, status=201)
23-
return JsonResponse(serializer.errors, status=400)
24-
22+
return Response(serializer.data, status=status.HTTP_201_CREATED)
23+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
24+
2525

26-
@csrf_exempt
27-
def snippet_detail(request, pk):
26+
@api_view(['GET', 'PUT', 'DELETE'])
27+
def snippet_detail(request, pk, format=None):
2828
"""
2929
Retrieve, update or delete a code snippet.
3030
"""
3131
try:
3232
snippet = Snippet.objects.get(pk=pk)
3333
except Snippet.DoesNotExist:
34-
return HttpResponse(status=404)
34+
return Response(status=status.HTTP_404_NOT_FOUND)
3535

3636
if request.method == 'GET':
3737
serializer = SnippetSerializer(snippet)
38-
return JsonResponse(serializer.data)
38+
return Response(serializer.data)
3939

4040
elif request.method == 'PUT':
41-
data = JSONParser().parse(request)
42-
serializer = SnippetSerializer(snippet, data=data) # 把 pk 对应的 snippet update 成 PUT method 传进来的 data
41+
serializer = SnippetSerializer(snippet, data=request.data)
4342
if serializer.is_valid():
4443
serializer.save()
45-
return JsonResponse(serializer.data)
46-
return JsonResponse(serializer.errors, status=400)
44+
return Response(serializer.data)
45+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
4746

4847
elif request.method == 'DELETE':
4948
snippet.delete()
50-
return HttpResponse(status=204)
51-
49+
return Response(status=status.HTTP_204_NO_CONTENT)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)