Sanic: Framework web asíncrono rápido para Python

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a Sanic

Sanic es un framework web asíncrono moderno para Python, diseñado para crear aplicaciones web de alto rendimiento. Basado en asyncio, permite manejar eficientemente miles de conexiones simultáneas gracias al soporte de la sintaxis async/await. Sanic es ideal para construir REST APIs, microservicios, aplicaciones en tiempo real y backends con alta carga de trabajo.

Características clave de Sanic

Rendimiento y arquitectura

Sanic está construido con un enfoque en la velocidad de ejecución. El framework utiliza asyncio para el procesamiento asíncrono de solicitudes, logrando un rendimiento comparable al de Node.js y Go. El soporte integrado de async/await hace que el código sea más legible y eficiente.

Funcionalidades

  • Soporte completo de async/await desde el primer momento
  • Enrutamiento con parámetros y middleware
  • Soporte integrado para WebSocket
  • Sistema de plantillas y manejo de archivos estáticos
  • Soporte para CORS, cookies y sesiones
  • Estructura de proyecto simple y clara
  • Excelente escalabilidad para servidores de API

Instalación y configuración inicial

Instalación básica

pip install sanic

Dependencias adicionales

pip install sanic[ext]  # Extensiones
pip install jinja2 aiofiles python-dotenv

Creación de la primera aplicación

from sanic import Sanic
from sanic.response import text

app = Sanic("MyApp")

@app.get("/")
async def index(request):
    return text("¡Hola desde Sanic!")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

Enrutamiento y manejo de solicitudes

Rutas básicas

@app.get("/")
async def get_handler(request):
    return text("Solicitud GET")

@app.post("/")
async def post_handler(request):
    return text("Solicitud POST")

@app.put("/")
async def put_handler(request):
    return text("Solicitud PUT")

@app.delete("/")
async def delete_handler(request):
    return text("Solicitud DELETE")

Rutas asíncronas

import asyncio

@app.get("/async")
async def async_route(request):
    await asyncio.sleep(1)  # Simula una operación asíncrona
    return text("Respuesta asíncrona")

Trabajo con parámetros y datos

Parámetros de ruta

@app.get("/user/<user_id:int>")
async def get_user(request, user_id):
    return text(f"ID de usuario: {user_id}")

@app.get("/profile/<username:str>")
async def get_profile(request, username):
    return text(f"Perfil: {username}")

Parámetros de consulta (Query)

@app.get("/search")
async def search(request):
    query = request.args.get("q", "nada")
    limit = request.args.get("limit", "10")
    return text(f"Búsqueda: {query}, límite: {limit}")

Manejo de JSON y formularios

from sanic.response import json

@app.post("/api/data")
async def receive_data(request):
    data = request.json
    return json({"received": data})

@app.post("/form")
async def handle_form(request):
    username = request.form.get("username")
    email = request.form.get("email")
    return json({"username": username, "email": email})

Tipos de respuesta

Diferentes formatos de respuesta

from sanic.response import text, json, html, redirect, file

@app.get("/text")
async def text_response(request):
    return text("Texto simple")

@app.get("/json")
async def json_response(request):
    return json({"message": "Respuesta JSON"})

@app.get("/html")
async def html_response(request):
    return html("<h1>Página HTML</h1>")

Recommendations