flask-mvc-core 0.1.2
Wrapper personalizado para Flask com estrutura MVC
Requires Python: >=3.10

# Flask MVC Framework

**Do you speak English? Read the README in English _[here](https://github.com/celiovmjr/flask-mvc-core/blob/main/README_en.md)_**

Este projeto implementa uma estrutura MVC (Model-View-Controller) baseada em Flask, facilitando o desenvolvimento de aplicações modulares e organizadas.

## 📌 Visão Geral

O framework fornece:

- Um `FlaskMVC` que encapsula a inicialização do Flask.
- Um `FlaskMVCBlueprint` para facilitar o registro e roteamento de controllers.

## 🚀 Instalação

1. Clone o repositório:

   ```bash
   git clone https://github.com/celiovmjr/flask-mvc-core.git
   cd flask-mvc-core
   ```

2. Crie um ambiente virtual e instale as dependências:

   ```bash
   python -m venv venv
   source venv/bin/activate  # No Windows, use 'venv\\Scripts\\activate'
   pip install -r requirements.txt
   ```

3. Instale o pacote `flask-mvc-core`:

   ```bash
   pip install flask-mvc-core
   ```

## 📂 Estrutura do Projeto

```
.
├── app/
│   ├── controllers/
│   ├── models/
│   ├── views/
├── public/
├── routes/
│   ├── __init__.py
│   ├── web.py
│   ├── api.py
│   ├── console.py
├── main.py
├── flask_mvc_core.py
├── flask_mvc_blueprint.py
├── README.md
```

## 🛠 Componentes Principais

### `flask_mvc_core.py`

Define a classe `FlaskMVC`, que herda de `Flask` e permite um registro centralizado de blueprints.

### `flask_mvc_blueprint.py`

Define a classe `FlaskMVCBlueprint`, uma extensão de `Blueprint` que facilita o roteamento e carregamento de controllers.

## 🚀 Como Declarar Rotas

1. **Definição de Rotas em Arquivos**:

   ``:

   ```python
   from flask_mvc_blueprint import FlaskMVCBlueprint

   web = FlaskMVCBlueprint("web")

   web.get("home", "HomeController@index")
   web.post("submit", "FormController@submit")
   ```

   ``:

   ```python
   from flask_mvc_blueprint import FlaskMVCBlueprint

   users = FlaskMVCBlueprint("api", prefix="/api/users")

   users.get("users", "UserController@index")
   users.get("users/<int:id>", "UserController@show")
   users.post("users", "UserController@store")
   ```

2. **Registrando as Rotas no Servidor**:

   ```python
   from waitress import serve
   from routes.web import web
   from routes.api import api
   from flask_mvc_core import FlaskMVC
   import logging

   app = FlaskMVC(__name__, template_folder="app/views", static_folder="public")
   app.register(web)
   app.register(users)

   if __name__ == "__main__":
       logging.info("Server running on http://localhost")
       serve(app, host="0.0.0.0", port=80, threads=10, _quiet=True)
   ```

## 🎨 Renderizando Views

Para renderizar uma view usando Jinja2, utilize o método `response.render`:

```python
from response import Response

def index(request, response: Response):
    return response.render("home.html", {"title": "Página Inicial"})
```

A pasta padrão das views é `/app/views`, e os arquivos estáticos estão localizados em `/public`.

## 📜 Licença

Este projeto está licenciado sob a MIT License - veja o arquivo [LICENSE](LICENSE) para mais detalhes.

---

Criado com ❤️ usando Flask 🚀