- Requisitos
- 1. Como instalar o Poetry
- 2. Como instalar e configurar o Redis
- 3. Como executar o projeto
- Endpoints da API
A aplicação está disponível em produção no seguinte endereço:
➡️ todo-list
Antes de rodar o projeto, certifique-se de que os seguintes itens estão instalados:
-
Poetry → Gerenciamento de dependências e ambiente virtual.
-
Redis → Utilizado para caching e otimização de desempenho da API.
Se você ainda não tem o Poetry instalado, recomenda-se a instalação via curl, que é a forma mais confiável para garantir um ambiente isolado:
curl -sSL https://install.python-poetry.org | python3 -
Caso prefira, também é possível instalar via pip:
pip install poetry
Após a instalação, você pode verificar se o Poetry foi instalado corretamente com o comando:
poetry --version
O Redis é necessário para caching e otimização da API.
sudo apt update && sudo apt install redis
brew install redis
No Windows, recomenda-se usar o WSL (Windows Subsystem for Linux) para rodar o Redis.
Caso tenha o Docker instalado, você pode rodar o Redis com:
docker run --name redis -p 6379:6379 -d redis
Após a instalação, inicie o Redis com:
redis-server
Ou, se estiver rodando no Docker:
docker ps
Para testar a conexão:
redis-cli ping
Se tudo estiver funcionando, o retorno será:
PONG
Dentro da pasta do projeto, execute o seguinte comando para instalar todas as dependências listadas no arquivo pyproject.toml:
poetry install
O Poetry irá criar um ambiente virtual e instalar todas as dependências listadas no pyproject.toml.
poetry run python manage.py migrate
Embora o Poetry gerencie o ambiente automaticamente ao executar os comandos, você pode ativá-lo manualmente com:
poetry shell
Executar o script:
Para executar o script, use o comando abaixo para rodar o arquivo Python dentro do ambiente virtual do Poetry:
poetry run python manage.py runserver
Ou, se você tiver configurado o Poetry como interpretador no seu editor, pode simplesmente rodar o script diretamente dentro do editor.
python manage.py runserver
Verificar onde o ambiente virtual foi criado:
poetry env info --path
Método | Rota | Descrição |
---|---|---|
POST | /users/register/ |
Registro de novo usuário |
POST | /users/login/ |
Login do usuário (JWT) — retorna access e refresh token |
POST | /users/token/refresh/ |
Atualiza o token de acesso (JWT) com o refresh token |
POST | /users/token/verify/ |
Verifica se o token JWT é válido |
GET | /users/me/ |
Retorna os dados do usuário autenticado |
Método | Rota | Descrição |
---|---|---|
POST | /tasks/ |
Criar uma nova tarefa |
GET | /tasks/ |
Listar tarefas com filtros, ordenação e paginação |
GET | /tasks/?page_size=n&page=m |
Paginação das tarefas (n por página, m página) |
GET | /tasks?status=<status> |
Filtrar tarefas pelo status usando o parâmetro de consulta 'status' (completed | pending | all) |
PUT | /tasks/:id/ |
Atualizar uma tarefa inteira |
PATCH | /tasks/:id/ |
Marcar/desmarcar tarefa como concluída |
DEL | /tasks/:id/ |
Excluir uma tarefa |
GET | /tasks/stats/ |
Estatísticas das tarefas do usuário |
GET | /tasks/metrics/?days=n |
Tarefas criadas nos últimos n dias |
- Classificar por 'created_at' ou 'title' usando 'ordering':
- GET /tasks?ordering=-created_at
- GET /tasks?ordering=title
- GET /tasks?ordering=-title
Método | Rota | Descrição |
---|---|---|
GET | /task-history/ |
Lista o histórico de todas as tarefas |
GET | /task-history/?task=<id> |
Histórico de uma tarefa específica |
{
"username": "<USERNAME>",
"password": "<PASSWORD>"
}
{
"refresh": "<refresh_token>"
}
🔹 Verificar validade do token – POST /users/token/verify/
{
"token": "<access_token>"
}
GET /users/me/
{Authorization: Bearer <access_token>}
- Vá na aba Authorization.
- Tipo: Bearer Token.
- Cole seu token JWT no campo
Token
.
Observação: Todos os endpoints (exceto /register/
e /login/
) requerem autenticação com JWT no cabeçalho:
-
Method:
POST
-
URL:
http://localhost:8000/tasks/
-
Body (raw → JSON):
{
"title": "Estudar Django",
"description": "Estudar views e serializers"
}
-
Method:
GET
-
URL:
http://localhost:8000/tasks/?status=pending&page_size=5&ordering=-created_at
-
Method:
PUT
-
URL:
http://localhost:8000/tasks/<id>/
-
Body (raw → JSON):
{
"title": "Novo título",
"description": "Nova descrição",
"is_completed": false
}
-
Method:
PATCH
-
URL:
http://localhost:8000/tasks/<id>/
-
Body (raw → JSON):
{
"is_completed": true
}
-
Method:
DELETE
-
URL:
http://localhost:8000/tasks/<id>/
-
Method:
GET
-
URL:
http://localhost:8000/tasks/stats/
-
Method:
GET
-
URL:
http://localhost:8000/tasks/metrics/?days=7
-
Method:
GET
-
URL:
http://localhost:8000/task-history/
-
Method:
GET
-
URL:
http://localhost:8000/task-history/?task=<id>
-
Motivo: Django é robusto, maduro e permite criação rápida de aplicações web. O Django REST Framework (DRF) oferece suporte completo para criação de APIs RESTful com recursos prontos como autenticação, permissões, serialização e paginação.
-
Benefício: Permite focar na lógica de negócio, evitando retrabalho com estrutura básica da API.
-
Padrão: Aplicações separadas por responsabilidade (
users
,tasks
,core
). -
Motivo: Separação de responsabilidades (Separation of Concerns) facilita a manutenção e escalabilidade.
-
Exemplo:
-
users
: gerencia autenticação e cadastro. -
tasks
: lida com CRUD de tarefas. -
core
: configurações e roteamento principal.
-
-
Motivo: JWT permite autenticação stateless (sem sessão no servidor), ideal para APIs RESTful.
-
Tecnologia usada:
djangorestframework-simplejwt
-
Benefício: Integração fácil com frontend e aplicativos mobile.
-
Motivo: Permite filtros avançados em endpoints, como tarefas concluídas ou pendentes.
-
Exemplo:
TaskFilter
permite filtrar porstatus
,created_at
, etc.
-
Motivo: Evita expor segredos no código.
-
Tecnologia usada:
python-decouple
.