Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tonyycruz/django-recipes
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.
https://github.com/tonyycruz/django-recipes
cors django django-rest-framework django-testing pillow pytest python python3 rest-framework selenium simple-jwt unit-testing
Last synced: 25 days ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/tonyycruz/django-recipes
- Owner: TonyyCruz
- Created: 2023-02-17T21:39:50.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-12T18:40:23.000Z (11 months ago)
- Last Synced: 2024-02-12T19:36:48.278Z (11 months ago)
- Topics: cors, django, django-rest-framework, django-testing, pillow, pytest, python, python3, rest-framework, selenium, simple-jwt, unit-testing
- Language: Python
- Homepage:
- Size: 18.4 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Authors: authors/__init__.py
Awesome Lists containing this project
README
Django Recipes
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.---
📃 Sobre o Projeto
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.
---
### 🛠 Tecnologias e Bibliotecas utilizadas no desenvolvimento do projeto
- **[Python](https://docs.python.org/3/)**
- **[Django](https://docs.djangoproject.com/pt-br/4.2/)**
- **[Rest Framework](https://www.django-rest-framework.org/)**
- **[Simple Jwt](https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html)**
- **[Pytest](https://pytest.org/en/7.4.x/index.html)**
- **[Django testing](https://docs.djangoproject.com/en/4.2/topics/testing/)**
- **[Selenium](https://www.selenium.dev/documentation/)**
- **[Django debug toolbar](https://django-debug-toolbar.readthedocs.io/en/latest/)**
- **[Pillow](https://pillow.readthedocs.io/en/stable/)**
- **[CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)**---
### 🚀 Como executar o projeto
_Clone o repositorio_
```jsx
git clone [email protected]: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)
---
:computer: Rodando Localmente
_Crie o ambiente virtual_
```jsx
python3 -m venv .venv
```_Ative o ambiente virtual_
```jsx
source .venv/bin/activate
```
_Instale as dependências com o comando_
```jsx
python -m pip install -r dev-requirements.txt
```_Rode o servidor_
```jsx
python manage.py runserver
```_Rodar os testes_
```jsx
python -m pytest
```
⚠️ Atenção: Não esqueça de que você deve estar com o ambiente virtual ativo.---
:whale: Rodando no Docker
_Rode na raiz do projeto o comando_```jsx
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_
```jsx
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_
```jsx
python -m pytest
```Ps: Os testes em selenium só estão funcionando rodando localmente.
## Este container estara espelhando os arquivos da sua máquina.
---
Rotas utilizáveis na API
- É recomendado utilizar algum cliente HTTP, como [Postman](https://www.postman.com/) ou o [Insomnia](https://insomnia.rest/download).
Ver rotas
POST
- POST `http://localhost:8000/authors/api/v2/` para cadastrar novo usuario. Utilize um body nesse formato:
```jsx
{
"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:
```jsx
{
"username": "SeuUsername",
"password": "SeuPassword1.",
}
```
---- POST `http://localhost:8000/recipes/api/token/refresh/` para atualizar o token. Utilize um body nesse formato:
```jsx
{
"refresh": ""
}
```
---- POST `http://localhost:8000/recipes/api/token/verify/` para validar o token. Utilize um body nesse formato:
```jsx
{
"token": ""
}
```
---
- 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 ````jsx
{
"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/` 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 `
---
- 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 `
---
- GET `http://localhost:8000/authors/api/v2/` exibe todas as receitas publicadas.
---
- GET `http://localhost:8000/authors/api/v2/` uma receita publicada de acordo com o id.
---
- GET `http://localhost:8000/authors/api/v2/?category_id=` busca receitas publicada de acordo com a categoria.
---
- GET `http://localhost:8000/authors/api/v2/?q=` 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 `
- PATCH `http://localhost:8000/authors/api/v2//` para atualizar dados do usuário. Utilize um body nesse formato:
```jsx
{
"last_name": "Cruz"
}
```
---
- PATCH `http://localhost:8000/recipes/api/v2//` para atualizar a receita. Utilize um body nesse formato:
```jsx
{
"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 `
- DELETE `http://localhost:8000/authors/api/v2/` deleta o usuário.
---
- DELETE `http://localhost:8000/recipes/api/v2/` deleta a receita se a mesma pertencer ao usuário.
---
HELP
Ao passar a `Authorization` é obrigatório o uso da palavra `Bearer` antes do token:
---
Funcionamento
- 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.