From 78b3a43c9bb1c4f9032d3b7864e08bb8ad01116a Mon Sep 17 00:00:00 2001 From: Ben Hoff Date: Wed, 25 Feb 2015 04:36:44 -0600 Subject: [PATCH 1/3] Changed from the implicity else return to explict else return. Also, commas --- docs/tutorial/1-serialization.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/tutorial/1-serialization.md b/docs/tutorial/1-serialization.md index ceb23a020..58bd00e64 100644 --- a/docs/tutorial/1-serialization.md +++ b/docs/tutorial/1-serialization.md @@ -104,7 +104,7 @@ The first thing we need to get started on our Web API is to provide a way of ser def create(self, validated_data): """ - Create and return a new `Snippet` instance, given the validated data. + Create and return a new `Snippet` instance given the validated data. """ return Snippet.objects.create(**validated_data) @@ -246,7 +246,7 @@ The root of our API is going to be a view that supports listing all the existing @csrf_exempt def snippet_list(request): """ - List all code snippets, or create a new snippet. + List all code snippets or create a new snippet. """ if request.method == 'GET': snippets = Snippet.objects.all() @@ -259,7 +259,8 @@ The root of our API is going to be a view that supports listing all the existing if serializer.is_valid(): serializer.save() return JSONResponse(serializer.data, status=201) - return JSONResponse(serializer.errors, status=400) + else: + return JSONResponse(serializer.errors, status=400) Note that because we want to be able to POST to this view from clients that won't have a CSRF token we need to mark the view as `csrf_exempt`. This isn't something that you'd normally want to do, and REST framework views actually use more sensible behavior than this, but it'll do for our purposes right now. @@ -268,7 +269,7 @@ We'll also need a view which corresponds to an individual snippet, and can be us @csrf_exempt def snippet_detail(request, pk): """ - Retrieve, update or delete a code snippet. + Retrieve, update, or delete a code snippet. """ try: snippet = Snippet.objects.get(pk=pk) @@ -285,7 +286,8 @@ We'll also need a view which corresponds to an individual snippet, and can be us if serializer.is_valid(): serializer.save() return JSONResponse(serializer.data) - return JSONResponse(serializer.errors, status=400) + else: + return JSONResponse(serializer.errors, status=400) elif request.method == 'DELETE': snippet.delete() From abe40880823021f5079f48fb1462d2b602185578 Mon Sep 17 00:00:00 2001 From: Ben Hoff Date: Wed, 25 Feb 2015 04:50:17 -0600 Subject: [PATCH 2/3] changed from implicit else return to explict else return. Added in queryset to fix bug --- docs/tutorial/2-requests-and-responses.md | 10 ++++++---- docs/tutorial/3-class-based-views.md | 14 ++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/tutorial/2-requests-and-responses.md b/docs/tutorial/2-requests-and-responses.md index e2c173d6e..1bc6f768e 100644 --- a/docs/tutorial/2-requests-and-responses.md +++ b/docs/tutorial/2-requests-and-responses.md @@ -47,7 +47,7 @@ We don't need our `JSONResponse` class in `views.py` anymore, so go ahead and de @api_view(['GET', 'POST']) def snippet_list(request): """ - List all snippets, or create a new snippet. + List all snippets or create a new snippet. """ if request.method == 'GET': snippets = Snippet.objects.all() @@ -59,7 +59,8 @@ We don't need our `JSONResponse` class in `views.py` anymore, so go ahead and de if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) Our instance view is an improvement over the previous example. It's a little more concise, and the code now feels very similar to if we were working with the Forms API. We're also using named status codes, which makes the response meanings more obvious. @@ -68,7 +69,7 @@ Here is the view for an individual snippet, in the `views.py` module. @api_view(['GET', 'PUT', 'DELETE']) def snippet_detail(request, pk): """ - Retrieve, update or delete a snippet instance. + Retrieve, update, or delete a snippet instance. """ try: snippet = Snippet.objects.get(pk=pk) @@ -84,7 +85,8 @@ Here is the view for an individual snippet, in the `views.py` module. if serializer.is_valid(): serializer.save() return Response(serializer.data) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': snippet.delete() diff --git a/docs/tutorial/3-class-based-views.md b/docs/tutorial/3-class-based-views.md index abf82e495..6fb7d7f0c 100644 --- a/docs/tutorial/3-class-based-views.md +++ b/docs/tutorial/3-class-based-views.md @@ -16,8 +16,10 @@ We'll start by rewriting the root view as a class based view. All this involves class SnippetList(APIView): """ - List all snippets, or create a new snippet. + List all snippets or create a new snippet. """ + queryset = Snippet.objects.all() + def get(self, request, format=None): snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True) @@ -28,14 +30,17 @@ We'll start by rewriting the root view as a class based view. All this involves if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) So far, so good. It looks pretty similar to the previous case, but we've got better separation between the different HTTP methods. We'll also need to update the instance view in `views.py`. class SnippetDetail(APIView): """ - Retrieve, update or delete a snippet instance. + Retrieve, update, or delete a snippet instance. """ + queryset = Snippet.objects.all() + def get_object(self, pk): try: return Snippet.objects.get(pk=pk) @@ -53,7 +58,8 @@ So far, so good. It looks pretty similar to the previous case, but we've got be if serializer.is_valid(): serializer.save() return Response(serializer.data) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) def delete(self, request, pk, format=None): snippet = self.get_object(pk) From 4648152d6135726e1e7f9953e84946a0c562bbef Mon Sep 17 00:00:00 2001 From: Ben Hoff Date: Wed, 25 Feb 2015 04:53:40 -0600 Subject: [PATCH 3/3] fixed commas in tutorial 6 --- docs/tutorial/6-viewsets-and-routers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/6-viewsets-and-routers.md b/docs/tutorial/6-viewsets-and-routers.md index 63dff73fc..6e9181868 100644 --- a/docs/tutorial/6-viewsets-and-routers.md +++ b/docs/tutorial/6-viewsets-and-routers.md @@ -30,7 +30,7 @@ Next we're going to replace the `SnippetList`, `SnippetDetail` and `SnippetHighl class SnippetViewSet(viewsets.ModelViewSet): """ This viewset automatically provides `list`, `create`, `retrieve`, - `update` and `destroy` actions. + `update`, and `destroy` actions. Additionally we also provide an extra `highlight` action. """