6.1. Usando Views Baseadas em Classes (CBV)

6.1.1. ClientAPIListView

Seguindo o mesmo exemplo do Model ListView, os resultados retornados do modelo irão para a variável de contexto object_list, a menos que você queira personalizá-lo. Usando ClientAPIListView, usaremos o atributo client_method ao vez do atributo model padrão para obter nossos resultados

from django_api_client.views import ClientAPIListView

from folder_project.clients import api_client

...

class TestListView(ClientAPIListView):
    template_name = "template_name.html"
    page_title = 'Tests'
    page_base_url = reverse_lazy('order:list')
    paginate_by = 50
    client_method = api_client.order.orders.list

Dica

  • template_name: caminho com nome do template

  • client_method: método do cliente que list os registros de um resource

  • page_title: Gera uma variável de contexto para usar no seu template

  • page_base_url: Informação usada na paginação e na busca

  • paginate_by: Némero de itens para gerar a paginação

Nota

O exemplo de uso assume the o endpoint é /order/orders/

6.1.1.1. Filtros da API

  • Habilitar filtro:

    Para habilitar um filtro para a API você só precisa adiciona o filtro que você deseja em api_filters

from django_api_client.views import ClientAPIListView

from folder_project.clients import api_client

...

class TestUsingFilterListView(ClientAPIListView):
    template_name = "template_name.html"
    page_title = 'Tests'
    page_base_url = reverse_lazy('order:list')
    paginate_by = 50
    client_method = api_client.order.orders.list
    api_filters = ['user']

Nota

O exemplo de uso usa o user, então se você passar ao usuário a querystring, este valor será passado para a API

  • Adicionar um filtro ou ‘queryset’ customizado:

    Para customizar uma busca ou chamada para a API você precisa usar o get_api_params adicionando os parametros que você deseja. Exemplo:

from django_api_client.views import ClientAPIListView

from folder_project.clients import api_client

...

class TestUsingCustomFilterListView(ClientAPIListView):
    template_name = "template_name.html"
    page_title = 'Tests'
    page_base_url = reverse_lazy('order:list')
    paginate_by = 50
    client_method = api_client.order.orders.list
    api_filters = ['user']

    def get_extra_params(self, request):
      extra_params = super().get_extra_params(request)
      extra_params['status'] = 'finished'
      return extra_params

Nota

O exemplo de uso pega todos os parâmetros que você já tem e adiciona o status personalizado para enviar para a API

6.1.2. ClientAPIDetailView

Seguindo o mesmo exemplo do Model DetailView, os resultados retornados do modelo irão para a variável de contexto object, a menos que você queira personalizá-lo. Usando ClientAPIDetailView, usaremos o atributo `` client_method`` em vez de model para obter nosso resultado

from django_api_client.views import ClientAPIDetailView

from folder_project.clients import api_client

...

class TestDetailView(ClientAPIDetailView):
    template_name = "template_name.html"
    page_title = _('View Test')
    client_method = api_client.order.orders.get

Dica

  • template_name: caminho com nome do template

  • client_method: método do cliente que pega um registro de um resource

  • page_title: Gera uma variável de contexto para usar no seu template

Nota

O exemplo de uso assume the o endpoint é /order/orders/

6.1.3. ClientAPICreateView

Seguindo o mesmo exemplo que o Model CreateView, ao enviar validar e salvar, usando ClientAPIListView, usaremos o atributo client_method em vez de model para obter nosso resultado

from django_api_client.views import ClientAPICreateView

from folder_project.clients import api_client

...

class TestCreateView(ClientAPICreateView):
    form_class = TestForm
    template_name = "template_name.html"
    page_title = _('View Test')
    success_url = reverse_lazy('test:list')
    client_method = api_client.order.orders.create

Dica

  • template_name: caminho com nome do template

  • client_method: método do cliente que criar um registro em um resource

  • page_title: Gera uma variável de contexto para usar no seu template

Nota

O exemplo de uso assume the o endpoint é /order/orders/

6.1.4. ClientAPIUpdateView

  • Simples

from django_api_client.views import ClientAPIUpdateView

from folder_project.clients import api_client

...

class TestUpdateView(ClientAPIUpdateView):
    form_class = TestForm
    template_name = "template_name.html"
    success_url = reverse_lazy('test:list')
    page_title = _('Edit Test')
    client_method = api_client.order.orders.update
    client_initial_method = api_client.order.orders.get
    partial = False
  • Avançado com dados iniciais customizados

from django_api_client.views import ClientAPIUpdateView

from folder_project.clients import api_client

...

class TestUpdateView(ClientAPIUpdateView):
    form_class = TestForm
    template_name = "template_name.html"
    success_url = reverse_lazy('test:list')
    page_title = _('Edit Test')
    client_method = api_client.order.orders.update
    client_initial_method = api_client.order.orders.get
    partial = False

    def get_initial(self):
        response = self.client_initial_method(**self.kwargs)
        data = response.as_dict()
        instance = response.as_obj()
        data['start_date'] = datetime.fromisoformat(instance.start_date).strftime('%d/%m/%Y %H:%M')
        data['end_date'] = datetime.fromisoformat(instance.end_date).strftime('%d/%m/%Y %H:%M')
        return data

Dica

  • template_name: caminho com nome do template

  • client_method: método do cliente que atualiza um registro de um resource

  • client_method: método do cliente que pega um registro de um resource

  • page_title: Gera uma variável de contexto para usar no seu template

  • partial: significa se você deseja atualizar apenas parte de seu registro ou se deseja atualizar tudo

Nota

O exemplo de uso assume the o endpoint é /order/orders/

6.1.5. ClientAPIDeleteView

Seguindo o mesmo exemplo do Model DetailView, os resultados retornados do modelo irão para a variável de contexto object, a menos que você queira personalizá-lo. Usando ClientAPIDetailView, usaremos o atributo `` client_method`` em vez de model para obter nosso resultado

from django_api_client.views import ClientAPIDeleteView

from folder_project.clients import api_client

...

class TestDetailView(ClientAPIDeleteView):
    client_method = api_client.order.orders.delete
    success_url = reverse_lazy('test:list')

Dica

  • client_method: método do cliente que remove um registro de um resource

Nota

O exemplo de uso assume the o endpoint é /order/orders/