Flask Python es un sencillo framework web, idóneo tanto para principiantes como para profesionales. Flask incluye únicamente lo esencial, pero los usuarios pueden implementar bibliotecas externas para ampliar sus funcionalidades.
- Crea la carpeta del proyecto, esto lo puedes hacer desde el navegador de archivos de tu computadora o desde la línea de comando.
- Abre la carpeta con VS Code
- Abre la terminal en VS Code
- Instala e inicializa el entorno virtual
virtualenv venv
source venv/bin/activate
- Ahora vamos a instalar los paquetes necesarios:
- Instalamos Flask
- Instalamos psycopg2-binary que nos permitirá conectarnos con el servidor de la base de datos
- Instalamos Flask-SQLAlchemy que es el ORM con el que vamos a interactuar con la base de datos
- Instalamos Flask-Mail que nos permitirá enviar correos
- Instalamos flask_cors que nos permitirá trabajar con los HEADERS y CORS
- Instalamos PyJWT que nos permitirá trabajar con tokes y autenticación
- Instalamos dotenv que nos permitirá trabajar con variables de entorno
pip install Flask psycopg2-binary Flask-SQLAlchemy Flask-Mail flask_cors PyJWT
Organiza tu proyecto con esta estructura básica
my_flask_app/
├── app.py # Archivo principal de la aplicación
├── config.py # Configuración de la app (base de datos, correo)
├── models.py # Definición de los modelos de la base de datos
├── .env
└── requirements.txt # Dependencias del proyecto
Para trabajar con la base de datos necesitas crear una cuenta en neon.tech y ahí crear una base de datos gratuita, te dará el comando completo que deberás copiar y agregar en tu archivo .env
# config.py
from dotenv import load_dotenv #Importamos el paquete dotenv
import os
load_dotenv() # Cargamos el archivo con las variables de entorno y vamos a usar os.getenv('nombre_variable') para acceder al dato
class Config:
SECRET_KEY = os.getenv('SECRET_KEY') # os.environ.get('SECRET_KEY') or 'una_llave_secreta'
SQLALCHEMY_DATABASE_URI = os.getenv('BBDD_URL') # os.environ.get('BBDD_URL')
SQLALCHEMY_TRACK_MODIFICATIONS = False
JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY') #or 'una_llave_secreta_para_jwt' # Nueva clave para JWT
# Configuración para enviar correo
MAIL_SERVER = 'smtp.dreamhost.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = os.getenv('EMAIL_USER') # Añade tu email #'[email protected]'
MAIL_PASSWORD = os.getenv('EMAIL_PASS') # Añade tu password #'2yZtrUQK'
En nuestro archivo .env
vamos a guardar los datos de nuestras variables:
EMAIL_USER=dirección de correo de la que mandaremos mails
EMAIL_PASS=contraseña del correo
JWT_SECRET_KEY=en gogle hay generadores de secrets para JWT
BBDD_URL='el comando que te da neon'
En el archivo models.py
importamos SQLAlquemy que será nuestro ORM, con esto podemos trabajar con la base de datos a traves de clases.
Nuestro primer modelo será el de usuarios.
# models.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
otp = db.Column(db.String(6), nullable=True)
is_verified = db.Column(db.Boolean, default=False)
Vamos a crear nuestra aplicación, para esto deberemos de modificar el archivo app.py
# app.py
from flask import Flask
from config import Config
from models import db
import random
from flask import request, jsonify
from models import User
from flask_mail import Mail, Message
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
with app.app_context():
db.create_all()
Ahora vamos a desarrollar la primer funcionalidad de nuestro proyecto, un EP que nos permita registrar usuarias en nuestra base de datos, para esto vamos a agregar código despues del método ```db.create_all()``. Recuerda que para python lo importante es la identación así que nuestro código, del EP, debe de empezar al inicio de la línea.
mail = Mail(app)
def generate_otp():
return str(random.randint(100000, 999999))
@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
email = data.get('email')
password = data.get('password')
# Verifica si el usuario ya existe
if User.query.filter_by(email=email).first():
return jsonify({'message': 'El usuario ya existe.'}), 400
# Crea el usuario con OTP
otp = generate_otp()
new_user = User(email=email, password=password, otp=otp)
db.session.add(new_user)
db.session.commit()
# Envía el correo electrónico con OTP
msg = Message('Verificación de tu cuenta', sender=app.config['MAIL_USERNAME'], recipients=[email])
msg.body = f'Tu OTP es: {otp}'
mail.send(msg)
return jsonify({'message': 'Usuario registrado. Revisa tu correo para la verificación.'}), 201
Este endpoint:
- Recibe el correo electrónico y la contraseña del usuario.
- Verifica si el correo ya está registrado.
- Genera un OTP y lo envía por correo.
- Devuelve un mensaje de confirmación.
Con esto ya tienes una estructura básica para el registro. En el próximo paso, agregaremos la lógica para que el usuario valide su OTP y active su cuenta.
Para correr tu proyecto y hacer pruebas necesitas ejecutar, en la terminal de VS Code, el siguiente comando python -m flask run
con esto tu proyecto estará corriendo.
La terminal te dará una url tipo 127.0.0.1:5000
que es donde está corriendo tu proyecto, deberás abrir Postman y configurar un EP POST para pasarle una URL tipo 127.0.0.1:5000/register
.
En Postman debes de configurar para el el body sea raw
y json
, para pasar un json con esta estructura:
{
"email":"",
"password":"",
"date_birth":""
}