Resumo : neste tutorial, você aprenderá como construir uma API simples que retorna uma lista de todos e um detalhe de um todo usando apenas Django.
Criando um ambiente virtual
Primeiro, crie um novo diretório chamado django_rest_api
:
mkdir django_rest_api
Segundo, navegue até o django_rest_api
diretório:
cd django_rest_api
Linguagem de código: Python ( python )
Terceiro, crie um ambiente virtual usando o módulo integrado venv
:
python -m venv venv
Linguagem de código: Python ( python )
Quarto, ative o ambiente virtual:
venv/scripts/activate
Quinto, instale o django
pacote usando o comando pip:
pip install django
Linguagem de código: Python ( python )
Por fim, crie o requirements.txt
arquivo:
pip freeze > requirements.txt
Linguagem de código: Python ( python )
Criando um novo projeto Django
Primeiro, crie um novo projeto Django chamado todolist
:
django-admin startproject todolist
Segundo, navegue até o diretório do projeto:
cd todolist
Linguagem de código: Python ( python )
Criando um novo aplicativo Django
Primeiro, crie um novo aplicativo chamado todo
dentro do todolist
projeto:
django-admin startapp todo
Linguagem de código: Python ( python )
Segundo, registre o todo
aplicativo settings.py
no todolist
projeto
INSTALLED_APPS = [
...
'todo.apps.TodoConfig',
]
Linguagem de código: Python ( python )
Definindo o modelo Todo
Primeiro, defina o Todo
modelo no models.py
aplicativo todo
:
from django.db import models
from django.contrib.auth.models import User
class Todo(models.Model):
title = models.CharField(max_length=255)
completed = models.BooleanField(default=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
Linguagem de código: Python ( python )
O Todo
modelo possui três campos: title
, completed
, e user
.
Faz user
referência ao User
modelo do django
pacote, que especifica a conta que criou o todo.
Segundo, registre o Todo
modelo no site de administração modificando o código no admin.py
aplicativo todo
:
from django.contrib import admin
from .models import Todo
admin.site.register(Todo)
Linguagem de código: Python ( python )
Ao fazer isso, você pode gerenciar no todo
site de administração do Django.
Fazendo migrações e modelos de migração
Primeiro, faça uma nova migração:
python manage.py makemigrations
Linguagem de código: Python ( python )
Segundo, migre as migrações para sincronizar os modelos com o banco de dados:
python manage.py migrate
Linguagem de código: Python ( python )
Terceiro, crie um usuário superadministrador para entrar no site de administração do Django:
python manage.py createsuperuser
Linguagem de código: Python ( python )
Vamos ligar para o usuário john
.
Finalmente, inicie o servidor de desenvolvimento Django:
python manage.py runserver
Linguagem de código: Python ( python )
Criando alguns todos
Primeiro, faça login no site de administração através da URL http://localhost:8000/admin
usando o superusuário john
criado acima:
E adicione alguns todos:
Construindo uma API com Django
Construiremos uma API apenas com Django. A API terá dois endpoints:
todos/
retorna todos todos.todos/id
retorna as informações de uma tarefa específica especificada por id. Por exemplo,todos/1
retorna as informações do todo com id 1.
Primeiro, crie duas funções de visualização dentro do views.py
aplicativo todo
:
from django.http import JsonResponse
from django.core.exceptions import ObjectDoesNotExist
from .models import Todo
def todo_list(request):
""" Return all todos
"""
# get all todos
todos = Todo.objects.all()
# prepare data to return
data = {'todos': list(todos.values())}
# return JSON
return JsonResponse(data)
def todo_detail(request, pk):
""" Return a todo instance
"""
try:
# find todo by id
todo = Todo.objects.get(pk=pk)
except ObjectDoesNotExist:
# return 404 if the todo does not exists
return JsonResponse({
'status_code': 404,
'error': f'Todo with id {pk} not found.'
})
else:
# prepare data to return
data = {
'id': todo.id,
'title': todo.title,
'completed': todo.completed,
'user': todo.user.username,
}
# return JSON
return JsonResponse(data)
Linguagem de código: Python ( python )
Como funciona.
- A
todo_list()
função obtém todos os todos como um conjunto de consultas, formata-os como um dicionário e retorna uma resposta JSON usando oJSONResponse
objeto. - A
todo_detail()
função obtém uma tarefa por id e retorna uma resposta JSON com 404 se a tarefa não existir. Caso contrário, ele retorna os detalhes de um modelo de tarefas, incluindo informações de nome de usuário.
Segundo, crie urls.py
dentro do todo
aplicativo e inclua-o no urls.py
projeto:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('todo.urls')), # new
]
Linguagem de código: Python ( python )
Mapeia urls.py
os endpoints da API com as visualizações de função:
from django.urls import path
from .views import todo_list, todo_detail
urlpatterns = [
path('todos/', todo_list, name='todo-list'),
path('todos/<int:pk>', todo_detail, name='todo-detail'),
]
Linguagem de código: Python ( python )
Terceiro, abra o http://localhost:8000/todos/
endpoint no navegador da web, você verá três todos no formato JSON:
{
"todos": [
{
"id": 1,
"title": "Learn Python",
"completed": false,
"user_id": 1
},
{
"id": 2,
"title": "Study Django",
"completed": false,
"user_id": 1
},
{
"id": 3,
"title": "Master Django REST API",
"completed": false,
"user_id": 1
}
]
}
Linguagem de código: JSON/JSON com comentários ( json )
Quarto, abra o endpoint do todo id 1 http://localhost:8000/todos/1
e você verá a seguinte resposta JSON:
{
"id": 1,
"title": "Learn Python",
"completed": false,
"user": "john"
}
Linguagem de código: JSON/JSON com comentários ( json )
Finalmente, se você abrir um endpoint que não existe, por exemplo, http://localhost:8000/todos/10
, você receberá um erro 404:
{
"status_code": 404,
"error": "Todo with id 10 not found."
}
Linguagem de código: JSON/JSON com comentários ( json )
Como você pode ver, o Django é capaz de construir APIs. Mas requer muito esforço para serializar as instâncias do modelo do Django em JSON e vice-versa.
Além disso, se você quiser adicionar mais recursos à API, como paginação, limitação de taxa, autenticação de token, etc. O Django não fornece todos esses recursos prontos para uso.
É por isso que o Django REST Framework entra em ação. Aprenderemos como desenvolver uma API totalmente RESTful usando o Django REST Framework nos próximos tutoriais.
Baixe o código fonte do projeto
Clique no link a seguir para baixar o código-fonte do projeto:
Baixe o projeto da API REST do Django
Resumo
- Django é capaz de construir APIs, mas requer muito esforço, pois não fornece recursos de API prontos para uso.
- Use um pacote de terceiros como Django Rest Framework para construir APIs com eficiência.