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')