Skip to content

Commit 5536bd5

Browse files
author
Juan Benitez
authored
Merge pull request #8 from JuanBenitez97/movie_posters
added custom pagination to get all movies endpoint
2 parents 5b99f63 + 17c20c0 commit 5536bd5

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,5 +94,14 @@ http POST http://127.0.0.1:8000/api/v1/movies/ "Authorization: Token <YOUR_TOKEN
9494
http PUT http://127.0.0.1:8000/api/v1/movies/3 "Authorization: Token <YOUR_TOKEN>" title="AntMan and The Wasp" genre="Action" year=2018
9595
http DELETE http://127.0.0.1:8000/api/v1/movies/3 "Authorization: Token <YOUR_TOKEN>"
9696
```
97+
98+
### Pagination
99+
The API supports pagination, by default responses have a page_size=10 but if you want change that you can pass through params page=size=X
100+
```
101+
http http://127.0.0.1:8000/api/v1/movies/?page=1 "Authorization: Token <YOUR_TOKEN>"
102+
http http://127.0.0.1:8000/api/v1/movies/?page=3 "Authorization: Token <YOUR_TOKEN>"
103+
http http://127.0.0.1:8000/api/v1/movies/?page=3&page_size=15 "Authorization: Token <YOUR_TOKEN>"
104+
```
105+
97106
Finally, I provide a DB to make these tests.
98107

movies/pagination.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from rest_framework.pagination import PageNumberPagination
2+
3+
class CustomPagination(PageNumberPagination):
4+
page_size = 10
5+
page_size_query_param = 'page_size'

movies/views.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from .models import Movie
55
from .permissions import IsOwnerOrReadOnly, IsAuthenticated
66
from .serializers import MovieSerializer
7+
from .pagination import CustomPagination
78

89
class get_delete_update_movie(RetrieveUpdateDestroyAPIView):
910
serializer_class = MovieSerializer
@@ -64,21 +65,21 @@ def delete(self, request, pk):
6465
class get_post_movies(ListCreateAPIView):
6566
serializer_class = MovieSerializer
6667
permission_classes = (IsAuthenticated,)
67-
# Get all movies
68+
pagination_class = CustomPagination
6869

6970
def get_queryset(self):
7071
movies = Movie.objects.all()
7172
return movies
72-
73-
def get(self, request):
7473

74+
# Get all movies
75+
def get(self, request):
7576
movies = self.get_queryset()
76-
serializer = MovieSerializer(movies, many=True)
77-
return Response(serializer.data, status=status.HTTP_200_OK)
77+
paginate_queryset = self.paginate_queryset(movies)
78+
serializer = self.serializer_class(paginate_queryset, many=True)
79+
return self.get_paginated_response(serializer.data)
7880

7981
# Create a new movie
8082
def post(self, request):
81-
8283
serializer = MovieSerializer(data=request.data)
8384
if serializer.is_valid():
8485
serializer.save(creator=request.user)

0 commit comments

Comments
 (0)