improve the response message to be more accurate
authorrougeronj
Wed, 27 May 2015 19:05:20 +0200
changeset 101 4dfeab3852da
parent 100 537d330ad7f0
child 102 622f5d1955b6
improve the response message to be more accurate
server/ammico/views.py
--- a/server/ammico/views.py	Wed May 27 19:03:08 2015 +0200
+++ b/server/ammico/views.py	Wed May 27 19:05:20 2015 +0200
@@ -9,7 +9,7 @@
 import requests
 from rest_framework import status
 from rest_framework.authentication import TokenAuthentication
-from rest_framework.permissions import IsAuthenticated
+from rest_framework.permissions import IsAuthenticated, AllowAny
 from rest_framework.response import Response
 from rest_framework.views import APIView
 
@@ -65,6 +65,22 @@
                 }
             )
             
+class PublicBooks(APIView):
+    """
+    Send back published books
+    """
+    
+    authentication_classes = (TokenAuthentication,)
+    permission_classes = (AllowAny,)
+
+    def get(self, request):
+        """
+        Return a list of all Books.
+        """
+        books = Book.objects.filter(public=True)
+        serializer = BookSerializer(books, many=True)
+        return Response(serializer.data)
+            
 class ListBooks(APIView):
     """
     Views to list all books.
@@ -94,7 +110,7 @@
             try:
                 book = Book.objects.get(user = request.user.id, id=request.data['idParent'])
             except Book.DoesNotExist:
-                return HttpResponse(status=404)
+                return Response(status=status.HTTP_400_BAD_REQUEST)
             new_book = deepcopy(book)
             new_book.title = request.data['title']
             new_book.idArticle = None
@@ -132,49 +148,44 @@
         try:
             book = Book.objects.get(user = request.user.id, id=idBook)
         except Book.DoesNotExist:
-            return HttpResponse(status=404)
+            return Response(status=status.HTTP_404_NOT_FOUND)
         
         serializer = BookSerializer(book)
         return Response(serializer.data)
     
-    def post(self, request, idBook):
+    def put(self, request, idBook):
         """
         update a Book
         """
         try:
             book = Book.objects.get(user = request.user.id, id=idBook)
         except Book.DoesNotExist:
-            return HttpResponse(status=404)
+            return Response(status=status.HTTP_204_NO_CONTENT)
+        
+        if (book.idArticle):
+            return Response(status=status.HTTP_403_FORBIDDEN)
+        
         serializer = BookSerializer(book, data=request.data)
         if serializer.is_valid():
             serializer.save()
-            return Response(serializer.data, status=status.HTTP_201_CREATED)
+            return Response(serializer.data, status=status.HTTP_200_OK)
         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
     
     def delete(self, request, idBook):
         """
         delete a book
         """
-        book = Book.objects.get(user = request.user.id, id = idBook)
+        try:
+            book = Book.objects.get(user = request.user.id, id = idBook)
+        except Book.DoesNotExist:
+            return Response(status=status.HTTP_404_NOT_FOUND)
+        
+        if (book.idArticle):
+            return Response(status=status.HTTP_403_FORBIDDEN)
+        
         book.delete()
         return Response(status=status.HTTP_204_NO_CONTENT)
     
-class BookSlides(APIView):
-    """
-    Get the slides from a book
-    """
-    authentication_classes = (TokenAuthentication,)
-    permission_classes = (IsAuthenticated,)
-
-    def get(self, request, idBook):
-        try:
-            book = Book.objects.get(user = request.user.id, id=idBook)
-        except Book.DoesNotExist:
-            return HttpResponse(status=404)
-        
-        serializer = SlideSerializer(book.slides.all(), many=True)
-        return Response(serializer.data)
-    
 
 class SlidesOrder(APIView):
     """
@@ -191,7 +202,7 @@
         try:
             book = Book.objects.get(user = request.user.id, id=idBook)
         except Book.DoesNotExist:
-            return HttpResponse(status=404)
+            return Response(status=status.HTTP_404_NOT_FOUND)
         response = {}
         response["order"] = book.get_slide_order()
         return Response(response)
@@ -203,7 +214,10 @@
         try:
             book = Book.objects.get(user = request.user.id, id=idBook)
         except Book.DoesNotExist:
-            return HttpResponse(status=404)
+            return Response(status=status.HTTP_204_NO_CONTENT)
+        
+        if (book.idArticle):
+            return Response(status=status.HTTP_403_FORBIDDEN)
         
         book.set_slide_order(request.data['order'])
         return Response(status=status.HTTP_200_OK)
@@ -221,10 +235,14 @@
         Return a list of slide
         """
         if 'idBook' in request.GET:
-            slides = Slide.objects.filter(book__user = request.user.id, book = request.GET['idBook'])
+            if 'limit' in request.GET:
+                limit = int(request.GET['limit'])
+            else:
+                limit= None;
+            slides = Slide.objects.filter(book__user = request.user.id, book = request.GET['idBook'])[:limit]
         else:
             slides = Slide.objects.filter(book__user = request.user.id)
-       ## if idBook in request
+    
         serializer = SlideSerializer(slides, many=True)
         return Response(serializer.data)
     
@@ -232,6 +250,15 @@
         """
         Add a slide
         """
+        print (request.data)
+        if 'book' in request.data:
+            try:
+                book = Book.objects.get(user = request.user.id, id=request.data['book'])
+            except Book.DoesNotExist:
+                return Response(status=status.HTTP_204_NO_CONTENT)
+            if (book.idArticle):
+                return Response(status=status.HTTP_403_FORBIDDEN)
+            
         serializer = SlideSerializer(data=request.data)
         if serializer.is_valid():
             serializer.save()
@@ -253,23 +280,27 @@
         try:
             slide = Slide.objects.get(book__user = request.user.id, id=idSlide)
         except Slide.DoesNotExist:
-            return HttpResponse(status=404)
+            return Response(status=status.HTTP_404_NOT_FOUND)
         
         serializer = SlideSerializer(slide)
         return Response(serializer.data)
     
-    def post(self, request, idSlide):
+    def put(self, request, idSlide):
         """
         Update slide information
         """
         try:
             slide = Slide.objects.get(book__user = request.user.id, id=idSlide)
         except Slide.DoesNotExist:
-            return HttpResponse(status=404)
+            return HttpResponse(status=status.HTTP_204_NO_CONTENT)
+        
+        if (slide.book.idArticle):
+            return Response(status=status.HTTP_403_FORBIDDEN)
+        
         serializer = SlideSerializer(slide, data=request.data)
         if serializer.is_valid():
             serializer.save()
-            return Response(serializer.data, status=status.HTTP_201_CREATED)
+            return Response(serializer.data, status=status.HTTP_200_OK)
         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
     
     def delete(self, request, idSlide):
@@ -279,7 +310,10 @@
         try:
             slide = Slide.objects.get(book__user = request.user.id, id = idSlide)
         except Slide.DoesNotExist:
-            return HttpResponse(status=404)
+            return Response(status=status.HTTP_404_NOT_FOUND)
+        
+        if (slide.book.idArticle):
+            return Response(status=status.HTTP_403_FORBIDDEN)
         
         slide.delete()
         return Response(status=status.HTTP_204_NO_CONTENT)
\ No newline at end of file