Exibindo Dados de Tabelas por meio de API no Django

O objetivo é criar uma API que exiba dados da tabela User do aplicativo learn, pemritindo que os usuários visualizem esses dados ao acessar uma URL específica.

Vamos começar com o arquivo learn/models.py:

#coding:utf8
from django.db import models

class Grupo(models.Model):
    nome = models.CharField(max_length=20)

    def usuarios(self):
        return ','.join([u.nome for u in self.usuario_set.all()])

    def __str__(self):
        return self.nome

class Usuario(models.Model):
    nome = models.CharField(max_length=20)
    email = models.CharField(max_length=50)
    grupos = models.ManyToManyField(Grupo, blank=True)

    def __str__(self):
        return self.nome

    def lista_grupos(self):
        return ','.join([g.nome for g in self.grupos.all()])

Em seguida, criaremos um novo aplicativo chamado api e o adicionaremos à lista INSTALLED_APPS em settings.py:

django-admin startapp api

Crie um arquivo urls.py dentro do diretório api e inclua-o no arquivo urls.py do projeto principal:

#coding:utf8
from django.conf.urls import url
from .views import obter_usuarios

urlpatterns = [
    url(r'^usuarios/$', obter_usuarios),
]

No arquivo api/views.py, implemente a função para responder às solicitações:

#coding:utf8
from django.http import JsonResponse
from learn.models import Usuario

def obter_usuarios(request):
    filtro_email = request.GET.get('email')
    filtro_grupo = request.GET.get('grupo')
    usuarios = Usuario.objects.all()

    if filtro_email:
        usuarios = usuarios.filter(email=filtro_email)
    if filtro_grupo:
        usuarios = usuarios.filter(grupos__nome__icontains=filtro_grupo)

    lista_usuarios = [{'nome': usuario.nome, 'email': usuario.email, 'grupos': usuario.lista_grupos()} for usuario in usuarios]
    return JsonResponse(lista_usuarios, safe=False)

Agora, você pode acessar a API através do navegador ou usando uma biblioteca como requests em Python:

import requests

resposta = requests.get('http://127.0.0.1:8000/api/usuarios/')
print(resposta.json())

Você também pode adicionar parâmetros na URL para filtrar os resultados, por exemplo:

  • Filtrar por email: http://127.0.0.1:8000/api/usuarios/?email=a@gmail.com
  • Filtrar por grupo: http://127.0.0.1:8000/api/usuarios/?grupo=Admin

Para ordenar os reusltados, utilize o método order_by no modelo:

usuarios = Usuario.objects.all().order_by('nome')

E para excluir certos registros, use o método exclude:

usuarios = Usuario.objects.all().exclude(nome='exemplo')

Tags: Django API Models Views QuerySet

Publicado em 10-6 16:36