Resumo : neste tutorial, você aprenderá como usar o recurso Paginação do Django REST Framework para dividir uma lista de registros em várias páginas.
Introdução à paginação do Django REST Framework
Suponha que você tenha milhares de registros e queira mostrá-los aos usuários. Mas a tela é bastante limitada. Portanto, muitas vezes você precisa dividir esses registros em páginas, cada uma contendo 5 ou 10 registros.
O recurso de paginação permite utilizar os recursos do servidor com mais eficiência, melhorar os tempos de carregamento e aprimorar as experiências do usuário.
A paginação do Django REST Framework permite dividir um grande conjunto de resultados em páginas individuais com algumas configurações simples.
Continuaremos com o projeto Todo API do tutorial anterior. Vamos adicionar alguns todos ao projeto para testar a paginação:
Estilos de paginação do Django
Django fornece estilos diferentes para paginar dados. Vamos explorá-los.
Paginação de número de página
O estilo de paginação de número de página aceita um único número de página nos parâmetros de consulta da solicitação. Você pode pular facilmente para páginas específicas.
Para configurar a paginação do número de página, adicione-o ao REST_FRAMEWORK
arquivo settings.py
do projeto.
Por exemplo, o seguinte instrui o DRF a usar o PageNumberPagination
estilo com tamanho de página 2:
REST_FRAMEWORK = {
# ...
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
}
Linguagem de código: Python ( python )
Depois que a configuração estiver concluída, você poderá fazer uma GET
solicitação ao endpoint /api/v1/todos?page=2
no navegador da web.
Aqui está a resposta:
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 6,
"next": "http://localhost:8000/api/v1/todos/?page=3",
"previous": "http://localhost:8000/api/v1/todos/",
"results": [
{
"id": 3,
"title": "Master Django REST API",
"completed": false,
"user": "john"
},
{
"id": 6,
"title": "Deploy API to Server",
"completed": false,
"user": "john"
}
]
}
Linguagem de código: Python ( python )
Na resposta:
count
especifica o total de registros.next
&previous
denotam os links para a página seguinte e anterior.results
armazenar os registros especificados peloPAGE_SIZE
. Neste exemplo, cada página contém 2 registros.
Limitar paginação de deslocamento
A paginação de deslocamento de limite simula a maneira de pesquisar vários registros em um banco de dados. O cliente diz ao servidor duas coisas:
- O número máximo de registros a serem retornados por página (
limit
). - Onde começa a lista entre os registros. (
offset
)
Se você estiver familiarizado com MySQL ou PostgreSQL, a paginação de deslocamento de limite funciona como as cláusulas LIMIT
e OFFSET
.
A seguir mostramos como configurar a paginação de deslocamento limite no settings.py
projeto:
REST_FRAMEWORK = {
# ...
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 2
}
Linguagem de código: Python ( python )
Se você fizer uma GET
solicitação ao endpoint /api/v1/todos/?limit=2&offset=2
, receberá a seguinte resposta:
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 6,
"next": "http://localhost:8000/api/v1/todos/?limit=2&offset=4",
"previous": "http://localhost:8000/api/v1/todos/?limit=2",
"results": [
{
"id": 3,
"title": "Master Django REST API",
"completed": false,
"user": "john"
},
{
"id": 6,
"title": "Deploy API to Server",
"completed": false,
"user": "john"
}
]
}
Linguagem de código: Python ( python )
O LimitOffsetPagination
estilo funciona como o PageNumberPagination
estilo, exceto que usa dois parâmetros de string de consulta, limite e deslocamento.
Paginação do Cursor
A limitação dos baseados em deslocamento, inclusive, PageNumberPagination
é LimitOffsetPagination
que eles não são eficientes para conjuntos de dados extremamente grandes.
É aqui que a paginação do cursor vem em socorro. A paginação do cursor funciona de forma eficiente para grandes conjuntos de dados.
A paginação do cursor usa um indicador de “cursor” opaco para paginação. Oferece controles de avanço e ré para navegação.
A paginação do cursor requer uma ordem consistente e exclusiva no conjunto de resultados. Também não permite saltar para uma posição arbitrária no conjunto de dados.
O seguinte mostra as configurações do CursorPagination
arquivo settings.py
:
REST_FRAMEWORK = {
# ...
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.CursorPagination',
'PAGE_SIZE': 2
}
Linguagem de código: Python ( python )
Por padrão, CursorPagination
assume que o modelo possui o created
campo carimbo de data/hora “”. Ele retornará primeiro os registros criados mais recentemente porque a ordem padrão é "-created"
.
Se o modelo não tiver o created
campo “”, você precisará especificar outro campo como id
. Para fazer isso, você segue estas etapas:
Primeiro, defina uma subclasse da CursorPagination
classe:
class TodoCursorPagination(CursorPagination):
ordering = 'id' # Default ordering
page_size = 2 # Set your desired page size
Linguagem de código: Python ( python )
Segundo, use o TodoCursorPagination
na visualização:
class TodoList(generics.ListCreateAPIView):
pagination_class = TodoCursorPagination
# ...
Linguagem de código: Python ( python )
Este exemplo mostra como configurar o estilo de paginação no nível da visualização. Ao contrário da configuração global, a configuração no nível da visualização só é aplicada a uma visualização específica.
Se você fizer uma GET
solicitação ao endpoint da API /api/v1/todos/
, receberá a seguinte resposta:
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"next": "http://localhost:8000/api/v1/todos/?cursor=cD0y",
"previous": null,
"results": [
{
"id": 1,
"title": "Learn Python",
"completed": false,
"user": "john"
},
{
"id": 2,
"title": "Study Django",
"completed": false,
"user": "john"
}
]
}
Linguagem de código: Python ( python )
Baixe o código fonte do projeto
Clique no link a seguir para baixar o código-fonte do projeto .
Resumo
- Django REST Framework permite definir o estilo de paginação nos níveis global e de visualização.
- Django REST Framework oferece três estilos de paginação, incluindo paginação de número de página, paginação de deslocamento de limite e paginação de cursor.
- Funciona
CursorPagination
de forma muito eficiente com conjuntos de dados extremamente grandes.