Introduction à Sanic
Sanic est un framework web asynchrone moderne pour Python, conçu pour créer des applications web haute performance. Basé sur asyncio, il permet de gérer efficacement des milliers de connexions simultanées grâce à la syntaxe async/await. Sanic est idéal pour développer des API REST, des microservices, des applications en temps réel et des backends à forte charge.
Fonctionnalités clés de Sanic
Performances et architecture
Sanic est construit avec un accent sur la rapidité d'exécution. Le framework utilise asyncio pour le traitement asynchrone des requêtes, offrant des performances comparables à Node.js et Go. La prise en charge native d'async/await rend le code plus lisible et efficace.
Capacités fonctionnelles
- Prise en charge complète d'async/await dès le départ
- Routage avec paramètres et middleware
- Support intégré de WebSocket
- Système de templates et gestion des fichiers statiques
- Support de CORS, cookies et sessions
- Structure de projet simple et claire
- Excellente scalabilité pour les serveurs API
Installation et configuration initiale
Installation de base
pip install sanic
Dépendances supplémentaires
pip install sanic[ext] # Extensions
pip install jinja2 aiofiles python-dotenv
Création de votre première application
from sanic import Sanic
from sanic.response import text
app = Sanic("MyApp")
@app.get("/")
async def index(request):
return text("Bonjour de Sanic")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
Routage et traitement des requêtes
Routes de base
@app.get("/")
async def get_handler(request):
return text("Requête GET")
@app.post("/")
async def post_handler(request):
return text("Requête POST")
@app.put("/")
async def put_handler(request):
return text("Requête PUT")
@app.delete("/")
async def delete_handler(request):
return text("Requête DELETE")
Routes asynchrones
import asyncio
@app.get("/async")
async def async_route(request):
await asyncio.sleep(1) # Simulation d'une opération asynchrone
return text("Réponse asynchrone")
Gestion des paramètres et des données
Paramètres de route
@app.get("/user/<user_id:int>")
async def get_user(request, user_id):
return text(f"ID utilisateur : {user_id}")
@app.get("/profile/<username:str>")
async def get_profile(request, username):
return text(f"Profil : {username}")
Paramètres de requête (query)
@app.get("/search")
async def search(request):
query = request.args.get("q", "rien")
limit = request.args.get("limit", "10")
return text(f"Recherche : {query}, limite : {limit}")
Traitement des JSON et formulaires
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})
Types de réponses
Différents formats de réponse
from sanic.response import text, json, html, redirect, file
@app.get("/text")
async def text_response(request):
return text("Texte simple")
@app.get("/json")
async def json_response(request):
return json({"message": "Réponse JSON"})
@app.get("/html")
async def html_response(request):
return html("<h1>Page HTML Aussi dans la bibliothèque
Planificateur de tâches Swift : GCD, OperationQueue et Timer sur iOS/macOS
Internationalisation (i18n) en C++ : guide complet
Frameworks CLI pour TypeScript : aperçu complet et exemples d'utilisation
cobra/pflag pour Go : guide complet avec exemples
ORM pour Kotlin : Exposed vs Ktor vs Ktorm — comparaison et exemples