Paginação do framework REST do Django

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_FRAMEWORKarquivo settings.pydo projeto.

Por exemplo, o seguinte instrui o DRF a usar o PageNumberPaginationestilo 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 GETsolicitação ao endpoint /api/v1/todos?page=2no 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:

  • countespecifica o total de registros.
  • next& previousdenotam os links para a página seguinte e anterior.
  • resultsarmazenar os registros especificados pelo PAGE_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 LIMITe OFFSET.

A seguir mostramos como configurar a paginação de deslocamento limite no settings.pyprojeto:

REST_FRAMEWORK = {
     # ...
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 2
}Linguagem de código:  Python  ( python )

Se você fizer uma GETsolicitaçã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 LimitOffsetPaginationestilo funciona como o PageNumberPaginationestilo, 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é LimitOffsetPaginationque 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 CursorPaginationarquivo settings.py:

REST_FRAMEWORK = {
    # ...
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.CursorPagination',
    'PAGE_SIZE': 2
}Linguagem de código:  Python  ( python )

Por padrão, CursorPaginationassume que o modelo possui o createdcampo 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 createdcampo “”, você precisará especificar outro campo como id. Para fazer isso, você segue estas etapas:

Primeiro, defina uma subclasse da CursorPaginationclasse:

class TodoCursorPagination(CursorPagination):
    ordering = 'id'  # Default ordering
    page_size = 2   # Set your desired page sizeLinguagem de código:  Python  ( python )

Segundo, use o TodoCursorPaginationna 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 GETsolicitaçã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 CursorPaginationde forma muito eficiente com conjuntos de dados extremamente grandes.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *