Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

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.