Sanic: Framework Web Assíncrono e Rápido para Python

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao Sanic

Sanic é um framework web assíncrono moderno para Python, projetado para criar aplicações web de alto desempenho. Baseado em asyncio, ele permite processar milhares de conexões simultâneas com eficiência, graças ao suporte à sintaxe async/await. Sanic é ideal para construir REST APIs, microsserviços, aplicações em tempo real e backends de alta carga.

Principais Características do Sanic

Desempenho e Arquitetura

Sanic foi construído com foco em velocidade de execução. O framework utiliza asyncio para processamento assíncrono de requisições, alcançando desempenho comparável ao Node.js e Go. O suporte nativo a async/await torna o código mais legível e eficiente.

Funcionalidades

  • Suporte completo a async/await pronto para uso
  • Roteamento com parâmetros e middleware
  • Suporte nativo a WebSocket
  • Sistema de templates e manipulação de arquivos estáticos
  • Suporte a CORS, cookies e sessões
  • Estrutura de projeto simples e intuitiva
  • Excelente escalabilidade para servidores de API

Instalação e Configuração Inicial

Instalação Básica

pip install sanic

Dependências Adicionais

pip install sanic[ext]  # Extensões
pip install jinja2 aiofiles python-dotenv

Criando a Primeira Aplicação

from sanic import Sanic
from sanic.response import text

app = Sanic("MyApp")

@app.get("/")
async def index(request):
    return text("Olá do Sanic")

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

Roteamento e Manipulação de Requisições

Rotas Básicas

@app.get("/")
async def get_handler(request):
    return text("Requisição GET")

@app.post("/")
async def post_handler(request):
    return text("Requisição POST")

@app.put("/")
async def put_handler(request):
    return text("Requisição PUT")

@app.delete("/")
async def delete_handler(request):
    return text("Requisição DELETE")

Rotas Assíncronas

import asyncio

@app.get("/async")
async def async_route(request):
    await asyncio.sleep(1)  # Simula uma operação assíncrona
    return text("Resposta assíncrona")

Trabalhando com Parâmetros e Dados

Parâmetros de Rota

@app.get("/user/<user_id:int>")
async def get_user(request, user_id):
    return text(f"ID do usuário: {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"Busca: {query}, limite: {limit}")

Manipulação de JSON e Formulários

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 Resposta

Diferentes Formatos de Resposta

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

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

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

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

Recommendations