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/