quickflask 0.1.4
quickflask in Python
Requires Python: >=3.6
Keywords: quickflask flask jamstack

# ¿QuickFlask?

Herramienta para generar un simple sitio en Flask perfectamente funcional el cual podrás personalizar desde lo más simple hasta algo más avanzado.

## ¿Qué es?

QuickFlask genera un sitio en Flask 100% funcional del cual podrás personalizar ciertas areas:

* La barra de navegación
* Las rutas de las que dispondrá el sítio
* Si tendrá una página de **login** o **registro**
* Metadatos como description, keywords, author, theme-color.

## Que no es

* Un [**CMS**](https://es.wikipedia.org/wiki/Sistema_de_gestión_de_contenidos)
* Un [**generador de sitios estáticos**](https://cioperu.pe/articulo/27676/que-es-un-generador-de-sitios-estaticos/)

## ¿Por qué QuickFlask?

El objetivo de QuickFlask es simplemente generar rápidamente un sitio funcional en Flask, ya sea para realizar pruebas, para una demostración o cuando quieres saltarte un poco los tutoriales y empezar a codificar.

# Instalación

Se recomienda instalar QuickFlask en un entorno virtual para evitar conflictos con otras librerías.

```bash
pip install quickflask
```

# Uso

Desde la consola de comandos ubícate en la carpeta donde estará tu sitio y ejecuta el siguiente comando:

```bash
quickflask quick <nombre_de_tu_sitio>
```

Esto generará una carpeta la cual tendrá todos los recursos necesarios para generar tu sitio.

## Personalización

Dispondrás de 4 archivos para personalizar tu sitio:

```
data.config.json
data.db.json (no implementado aún, apenas es un mero bosquejo de la idea)
data.info.json
data.pages.json
```

* ### data.config.json

  Algunas cofiguraciones de QuickFlask.

  | Valor        | Descripción                                                  | Tipo     |
  | ------------ | ------------------------------------------------------------ | -------- |
  | **autopep8** | Formatea automáticamente el código Python del archivo `main.py` de tu sitio. | Booleano |
  | **htmlprry** | Formatea los archivos html para mejorar la estructura. (No implementado aún) | Booleano |



* ### data.info.json

  Algunos metadatos del sitio.

  | Valor           | Descripción                                                  |
  | --------------- | ------------------------------------------------------------ |
  | **site-name**   | Nombre del sitio.                                            |
  | **description** | Descripción del sitio.                                       |
  | **keywords**    | Palabras clave que describen al sitio                        |
  | **author**      | Autor del sitio.                                             |
  | **theme-color** | Color de tema del sitio.                                     |
  | **logo**        | Este aparecerá en la barra de navegación.                    |
  | **favicon**     | Icono del sitio, este aparecerá en la la pestaña del navegador. |

  

* ### data.pages.json

  Estas serán las páginas que mostrará el sitio. Por defecto hay 4 páginas, **login**, **register**, **info** y **contact**. Por decirlo de alguna manera, existen dos tipos de páginas que se pueden configurar:

  * Aquellas que solo son para mostrar información.
  * Aquellas que envían información a través de formularios.

  Sin embargo solo hay una diferencia entre ellas, la propiedad `action`, a modo de comparación tomaremos nuestras páginas `info` y `login`.

      "info":{"title":"Información",
              "nav":true,
              "template":"general"},
      
      "login":{"action":"do_login",
               "title":"Iniciar sesión",
               "nav":true,
               "template":"login"},

  A excepción de la propiedad `action` todas las páginas deben tener las siguientes propiedades:	

  | Propiedad | Descipción                                                   | Tipo de valor |
  | --------- | :----------------------------------------------------------- | ------------- |
  | nombre    | Debe ser un nombre único y lo más simple posible, sin espacios o caracteres especiales, en el caso de nuestros ejemplos son `info` y `login`. Estas serán las `rutas` y `endpoints` de nuestras páginas. | string        |
  | title     | Este será el titulo que se mostrará en la pestaña del navegador. | string        |
  | nav       | Determina si la página en cuestión será mostrada en la barra de navegación del sitio. | boolean       |
  | template  | Determina la plantilla para la página, por defecto. Mire abajo las plantillas disponibles. | string        |
  | action    | Nombre de la ruta que recibirá los datos de la página, también debe ser un nombre con las mismas características del nombre de la pagina. | string        |

  > Como se especificó arriba, QuickFlask no busca ser un generador de sitios como tal, por lo que las plantillas solamente brindan una estructura que se pueda personalizar fácilmente.

  * **general**
    * Página simple con un header y un mensaje.
  * **login**
    * Campo de usuario
    * Campo de contraseña
    * Botón para iniciar
    * Link para recuperar contraseña
    * Ruta que recibirá los datos de los formularios
  * **register**
    * Campo de correo
    * Campo de usuario
    * Campo de contraseña
    * Botón para registrar
    * Link para ir a la página del login
    * Ruta que recibirá los datos de los formularios

  Como puedes ver, las plantillas `login` y `register`, generarán automáticamente la ruta que va a recibir los datos, esta ruta recibirá el nombre que se determine en la propiedad `action`. (¿Quizás sea mejor cambiarlo a ruta?)

 ## Generar el sitio

Una vez tengas todo configurado como quieras ejecuta el archivo `static.py`

```
python static.py
```

Tu sitio será generado en la carpeta `dist/`.

# TODO

* Soporte para distintos estilos.

* Generación de los modelos de base datos dependiendo del gestor de base de datos a utilizar.
  * Soporte para claves foráneas.
  
* Aplicar formato a archivos HTML luego de ser generados (se desorganizan un poco).

* Asignar métodos específicos a las rutas (POST, GET).

* Implementar rutas para los errores de servidor (404, 403).

   Si crees que se puede agregar algo más a la lista abre un **issue** por favor, recuerda tener en mente la esencia de QuickFlask:

  > Permitir generar desde sitios tan simples que un principiante pueda comprende de la mano con un tutorial, como poder configurarlo hasta obtener sitios más personalizados.
  
  
  
  Ícono por defecto cortesía de: http://www.fasticon.com/