Dica 51 - DRF: paginação
Github: https://github.com/rg3915/drf-example
Doc: https://www.django-rest-framework.org/api-guide/pagination
Vamos precisar do django-seed
pip install django-seedEditar settings.py
INSTALLED_APPS = [
...
'django_seed',Rodar o comando
python manage.py seed blog --number=250Editar blog/models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=255)
class Meta:
verbose_name_plural = "Authors"
def __str__(self):
return self.name
class Post(models.Model):
body = models.TextField()
author = models.ForeignKey(Author, on_delete=models.CASCADE, null=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = "Posts"
def __str__(self):
return self.bodyEditar blog/views.py
from rest_framework.permissions import AllowAny
class AuthorViewSet(viewsets.ModelViewSet):
...
permission_classes = (AllowAny,)
class PostViewSet(viewsets.ModelViewSet):
...
permission_classes = (AllowAny,)Editar blog/serializers.py
class AuthorSerializer(serializers.ModelSerializer):
...
class PostSerializer(serializers.ModelSerializer):
...LimitOffsetPagination
Editar settings.py
REST_FRAMEWORK = {
...
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 5
}PageNumberPagination
Editar settings.py
REST_FRAMEWORK = {
...
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 5
}Paginação personalizada global (Custom Pagination)
Criar app core
rm -f core/{admin,models,tests,views}.py
rm -rf core/migrations
touch core/pagination.pyEditar core/pagination.py
from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100Editar settings.py
REST_FRAMEWORK = {
...
'DEFAULT_PAGINATION_CLASS': 'core.pagination.StandardResultsSetPagination',
'PAGE_SIZE': 5
}Paginação personalizada para o blog
Editar blog/pagination.py
from rest_framework.pagination import PageNumberPagination
class CustomBlogResultsSetPagination(PageNumberPagination):
page_size = 7
page_size_query_param = 'page_size'
max_page_size = 70Editar blog/views.py
from blog.pagination import CustomBlogResultsSetPagination
class PostViewSet(viewsets.ModelViewSet):
...
pagination_class = CustomBlogResultsSetPaginationCursor Pagination
Editar settings.py
REST_FRAMEWORK = {
...
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.CursorPagination',
'PAGE_SIZE': 5
}Requer um campo com o nome
createdno seu modelo.
Last updated
Was this helpful?