Exemplo n.º 1
0
 def patch(self, request, id):
     book = get_object_or_404(Book, id=id)
     serializer = BookSerializer(book, data=request.data, partial=True)
     if serializer.is_valid():
         serializer.save()
         return JsonResponse(data=serializer.data,
                             status=status.HTTP_200_OK)
     return JsonResponse(data="wrong parameters",
                         status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 2
0
    def get(self, request):
        title = request.GET.get('title', None)
        author = request.GET.get('author', None)
        language = request.GET.get('language', None)
        pub_date = request.GET.get('pub_date', None)

        if title is None and author is None and pub_date is None and language is None:
            books = Book.objects.all()
        else:
            filter_query = {}

            if title is not None:
                filter_query['title__icontains'] = title

            if author is not None:
                filter_query['author__icontains'] = author

            if language is not None:
                filter_query['language'] = language

            if pub_date is not None:
                if '-' in pub_date:
                    from_year, to_year = pub_date.split('-')
                    filter_query['pub_date__lte'] = to_year
                    filter_query['pub_date__gte'] = from_year
                else:
                    filter_query['pub_date'] = pub_date

            books = Book.objects.filter(**filter_query)

        serializer = BookSerializer(books, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)
Exemplo n.º 3
0
    def test_filter_books_with_string_queries_pub_date_range(self):
        book1 = create_a_book(title='title 1', pub_date=2019)
        book2 = create_a_book(title='title 2', pub_date=2015)
        create_a_book(title='title 3', pub_date=2012)
        create_a_book(title='title 3', pub_date=2020)

        res = self.client.get('/api/books?pub_date=2015-2019')
        serializer = BookSerializer([book1, book2], many=True)
        self.assertEqual(res.data, serializer.data)
Exemplo n.º 4
0
    def test_filter_books_with_string_queries_language_many_matching(self):
        book1 = create_a_book(title='title 1', author='Jack Ko', language='en')
        book2 = create_a_book(title='title 2',
                              author='Jack Koko',
                              language='en')
        create_a_book(title='title 3', author='Jack Koro', language='pl')

        res = self.client.get('/api/books?language=en')
        serializer = BookSerializer([book1, book2], many=True)
        self.assertEqual(res.data, serializer.data)
Exemplo n.º 5
0
    def test_filter_books_with_string_queries_author_many_matching(self):
        book1 = create_a_book(title='title 1', author='Jack Ko')
        book2 = create_a_book(title='title 2', author='Jack Koko')
        book3 = create_a_book(title='title 3', author='Jack Koro')
        create_a_book(title='title 3', author='Jammie Koro')

        res = self.client.get('/api/books?author=Jack')

        serializer = BookSerializer([book1, book2, book3], many=True)
        self.assertEqual(res.data, serializer.data)
Exemplo n.º 6
0
    def test_filter_books_with_string_queries_title_many_matching(self):
        book1 = create_a_book(title='Hobbit')
        book2 = create_a_book(title='Hobbit 2')
        book3 = create_a_book(title='This is Hobbit 3')
        create_a_book(title='This is my Hobby')

        res = self.client.get('/api/books?title=Hobbit')

        serializer = BookSerializer([book1, book2, book3], many=True)
        self.assertEqual(res.data, serializer.data)
Exemplo n.º 7
0
    def delete(self, request, id):
        book = get_object_or_404(Book, id=id)
        serializer = BookSerializer(book)
        book.delete()

        return Response(serializer.data, status=status.HTTP_200_OK)
Exemplo n.º 8
0
 def post(self, requset):
     serializer = BookSerializer(data=requset.data)
     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)