Los parámetros de ruta opcionales en Flask permiten que una URL acepte o no ciertos valores sin generar errores, lo que mejora la flexibilidad de las rutas.
Aunque Flask no soporta directamente parámetros opcionales en el decorador @app.route, se puede lograr utilizando una sintaxis condicional o definiendo múltiples rutas que apunten a la misma función.
En Flask, puedes definir parámetros opcionales utilizando el operador de valor predeterminado en los argumentos de la función.
from flask import Flask
app = Flask(__name__)
@app.route('/saludo/', defaults={'nombre': 'invitado'})
@app.route('/saludo/<nombre>')
def saludo(nombre):
return f"Hola, {nombre}!"
if __name__ == '__main__':
app.run(debug=True, port=5000) /saludo/, el parámetro nombre toma el valor predeterminado de ‘invitado’./saludo/Brenda, se mostrará: Hola, Brenda!.Otra manera es verificar manualmente si el parámetro fue incluido en la URL.
from flask import Flask
app = Flask(__name__)
@app.route('/saludo/', methods=['GET'])
@app.route('/saludo/<nombre>', methods=['GET'])
def saludo(nombre=None):
if nombre:
return f"Hola, {nombre}. Bienvenido a mi portafolio."
return "Bienvenido a mi portafolio sin nombre específico."
if __name__ == '__main__':
app.run(debug=True, port=5000) /saludo/<nombre>) y otra sin él (/saludo/).saludo() recibe el parámetro nombre como None por defecto.nombre, se muestra el mensaje personalizado; si no, se devuelve un mensaje genéricEste enfoque es útil si necesitas lógica más avanzada para manejar casos específicos.
Puedes extender el uso de valores opcionales para trabajar con múltiples parámetros.
from flask import Flask
app = Flask(__name__)
@app.route('/producto/', defaults={'categoria': 'general', 'id': None})
@app.route('/producto/<categoria>/', defaults={'id': None})
@app.route('/producto/<categoria>/<int:id>')
def producto(categoria, id):
if id is None:
return f"Mostrando productos en la categoría: {categoria}"
return f"Mostrando detalles del producto {id} en la categoría: {categoria}"
if __name__ == '__main__':
app.run(debug=True, port=5000) /producto/ responde con: Mostrando productos en la categoría: general./producto/electrónica/ responde con: Mostrando productos en la categoría: electrónica./producto/electrónica/123 responde con: Mostrando detalles del producto 123 en la categoría: electrónica.