Somethig about Flask Back-end

Mostraré algunos de los scripts que uso en flask para (Get,Post,Delete etc..) más la conexión a base de datos, archivo configuración y decorador de “Before request” para la protección de rutas.

Esto sería lo primero: Conexión a base de datos.

#########################################
### MODULO DE CONEXION A BASE DE DATOS ##
#########################################


from flask_mysqldb import MySQLdb
from . import config

db = MySQLdb.connect(host=config.MYSQL_HOST,         # your host, usually localhost
                     user=config.MYSQL_USER ,        # your username
                     passwd= config.MYSQL_PASSWORD,  # your password
                     db=config.MYSQL_DB)             # name of the data base

##########################################                     

Si os habeis fijado, el modulo anterior importa tanto MySQLdb como config.


############################################
### MODULO DE VARIABLES DE CONFIGURACION ##
############################################


MYSQL_HOST="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
MYSQL_USER="xxxxxxxxxxxxxxxxx"
MYSQL_PASSWORD="xxxxxxxxxxxxxxxxxxx"
MYSQL_DB="xxxxxxxxxxxxxxxxxx"
MYSQL_PORT=3306
MYSQL_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
APP_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
PEXELS_APIKEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


##############################################
##############################################
##############################################


La protección de rutas se puede hacer de diversas formas. Una de las más cómodas es usar un decorador llamando a su función decoradora.



@app.before_request
def before_request_func():
     print("before_request executing!")



Otro script que no debe faltar es un control sobre un mal enrutamiento para controlar o redirigir el error 404 y renderizar un HTML generado para este uso.



################################################
### CONTROL DE RUTAS NO EXISTENTES ( 404 PAGE) 
################################################ 
 
 
@app.errorhandler(404)
def not_found(e):
  return render_template("salida.html",mensaje="Recurso no encontrado. Error 404")



#################################################


En el siguiente script se verá como incluimos (sin decorador), el condicional sobre una de las (clave/valor) de “FLASK SESSION” para evitar accesos no autorizados.



##################################################
### FUNCION QUE DEVUELVE TABLA FAVORITOS (ALL) ###
##################################################

@app.route("/ver_favoritos")
def ver_favoritos():
    if not session["email"]:
         return render_template("salida.html",mensaje="No tiene acceso a este recurso, pero hay otros mundos")
    encontrados=todos_los_favoritos.consulta()
    if encontrados:
         return jsonify(encontrados)
    else:
        Dom.mensaje_error("No hay nada que mostrar")
        return "error"

###################################################


Ahora mostrarémos la función junto al módulo encargado.

Estamos usando SQl directamente. Otra de las posibles formas de trabajar sería usando un ORM como pueda ser SQLAlchemy.



###################################################
### FUNCION QUE DEVUELVE TABLA FAVORITOS (ALL) ####
###################################################

@app.route("/ver_favoritos")
def ver_favoritos():
    if not session["email"]:
         return render_template("salida.html",mensaje="No tiene acceso a este recurso, pero hay otros mundos")
    encontrados=todos_los_favoritos.consulta()
    if encontrados:
         return jsonify(encontrados)
    else:
        Dom.mensaje_error("No hay nada que mostrar")
        return "error"



#####################################################
###  LECTURA TABLA FAVORITOS ########################
#####################################################

from . import connection

def consulta():
   try:  
        db = connection.db
        cursor = db.cursor()
            # campos de favoritos (   0-id...... 1-nombre ....2-url   )
        cursor.execute("SELECT * FROM favoritos ")
        favoritos_all= cursor.fetchall()
        cursor.close()
     
   except:
       return False   
    
   return favoritos_all

   


Esto es una pequeña demostración. Para ver otras publicaciones al respecto pueden encontrarme en LinkedIn