Neste projeto, foi desenvolvida uma aplicação full stack de um site de receitas utilizando Django Web Framework e Django Rest Framework possibilitando fazer um CRUD de receitas com um controle por parte dos administradores.
Foi desenvolvida uma aplicação em Python Django que permite fazer um CRUD para um banco de dados. Esse CRUD possibilita tanto a criação quanto o login de usuários, assim como criação edição e deleção de receitas, tudo isso atravez de forms. Também foi disponibilizado uma API construida em Rest Framework, que possibilita também um CRUD na aplicação atravez de métodos HTTP, possibilitando também a adição e login de usuários, tendo sua validação através de Jwt validators, possibilitando também a criação edição e deleção de receitas. Foram feitos testes unitários funcionais e ponta a ponta cobrindo 90% da aplicação, foram utilizados: pytest, django testing e selenium.
- Python
- Django
- Rest Framework
- Simple Jwt
- Pytest
- Django testing
- Selenium
- Django debug toolbar
- Pillow
- CORS
Clone o repositorio
git clone git@github.com:TonyyCruz/django-recipes.git && cd django-recipes
- Renomeie e configurar o arquivo .env.example (deve ser criado um arquivo
.env
com o conteudo do.env.example
configurado)
💻 Rodando Localmente
Crie o ambiente virtual
python3 -m venv .venv
Ative o ambiente virtual
source .venv/bin/activate
Instale as dependências com o comando
python -m pip install -r dev-requirements.txt
Rode o servidor
python manage.py runserver
Rodar os testes
python -m pytest
🐳 Rodando no Docker
Rode na raiz do projeto o comando
docker-compose up -d
- Esse serviço irá inicializar um container chamado
recipes
e adicionará uma imagem docker chamada django-recipes_web. - A partir daqui você pode rodar o container via CLI ou abri-lo no VS Code.
Via CLI use o comando
docker exec -it recipes bash
- Ele te dará acesso ao terminal interativo do container recipes criado pelo compose, que está rodando em segundo plano.
Rodar os testes
python -m pytest
Ps: Os testes em selenium só estão funcionando rodando localmente.
Ver rotas
POST
-
POST
http://localhost:8000/authors/api/v2/
para cadastrar novo usuario. Utilize um body nesse formato:{ "first_name": "SeuNome", "last_name": "SeuSobrenome", "username": "SeuUsername", "password": "SeuPassword1.", "email": "[email protected]" }
-
POST
http://localhost:8000/recipes/api/token/
para fazer login e receber um token. Utilize um body nesse formato:{ "username": "SeuUsername", "password": "SeuPassword1.", }
-
POST
http://localhost:8000/recipes/api/token/refresh/
para atualizar o token. Utilize um body nesse formato:{ "refresh": "<O "refresh" token que foi recebido ao fazer login>" }
-
POST
http://localhost:8000/recipes/api/token/verify/
para validar o token. Utilize um body nesse formato:{ "token": "<O "access" token que foi recebido ao fazer login>" }
-
POST
http://localhost:8000/recipes/api/v2/
para criar uma nova receita. Utilize um body nesse formato:
Para essa ação, o usuário deve enviar o "access" token no Header da requisição.Authorization
Bearer <access token>
{ "title": "Minha receita", "description": "Uma receita deliciosa", "preparation_time":10, "preparation_time_unit": "minute", "servings": 10, "servings_unit": "portion", "preparation_steps": "Descrição dos passos necessários para a criação bem sucedida da receita." }
ps: Para enviar a imagem, os mesmos dados devem ser enviados por multipart form com a inclusão do campo "cover".
GET
-
GET
http://localhost:8000/authors/api/v2/<id>
exibe os dados do próprioe só o mesmo pode acessar.
Para essa ação, o usuário deve enviar o "access" token no Header da requisição.Authorization
Bearer <access token>
-
GET
http://localhost:8000/authors/api/v2/me
exibe os dados do usuário autenticado.
Para essa ação, o usuário deve enviar o "access" token no Header da requisição.Authorization
Bearer <access token>
- GET
http://localhost:8000/authors/api/v2/
exibe todas as receitas publicadas.
- GET
http://localhost:8000/authors/api/v2/<id>
uma receita publicada de acordo com o id.
- GET
http://localhost:8000/authors/api/v2/?category_id=<id>
busca receitas publicada de acordo com a categoria.
- GET
http://localhost:8000/authors/api/v2/?q=<search>
busca receitas de acordo com a palavra passada "".
PATCH
Para todos os métodos PATCH, o usuário devera enviar o "access" token no Header da requisição.
Authorization
Bearer <access token>
- PATCH
http://localhost:8000/authors/api/v2/<id>/
para atualizar dados do usuário. Utilize um body nesse formato:
{
"last_name": "Cruz"
}
- PATCH
http://localhost:8000/recipes/api/v2/<id>/
para atualizar a receita. Utilize um body nesse formato:
{
"title": "Novo titulo",
"description": "Nova descrição",
}
DELETE
Para todos os métodos DELETE, o usuário devera enviar o "access" token no Header da requisição.
Authorization
Bearer <access token>
- DELETE
http://localhost:8000/authors/api/v2/<id>
deleta o usuário.
- DELETE
http://localhost:8000/recipes/api/v2/<id>
deleta a receita se a mesma pertencer ao usuário.
- A aplicação roda na url
http://localhost:8000/
- Para facilitar a sua experiência, tem um super usuário cadstrado
Username: admin
password: admin
. - A área de administração do site fica em
http://localhost:8000/admin
. - Qualquer usuário cadastrado pode criar receitas, mas apenas administradores podem publicá-las.
- Foram adicionadas algumas receitas fictícias para a visualização.