# HG changeset patch # User rougeronj # Date 1432746320 -7200 # Node ID 4dfeab3852dab7da95b0d1ab7284243a0c479d52 # Parent 537d330ad7f07cd3be2c55ac033b9f0c360e9a44 improve the response message to be more accurate diff -r 537d330ad7f0 -r 4dfeab3852da 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