1.8 KiB
1.8 KiB
Architecture & Philosophie
Ce projet s'inspire de la philosophie de Rust : "Rendre les états illégaux impossibles à représenter".
Si vous venez de Django, voici les principales différences à garder en tête :
1. Extracteurs vs Objet Request
Contrairement à Django qui passe un objet request "fourre-tout" à chaque vue, ce projet utilise des **Extracteurs Axum
** (dans la signature des fonctions).
- Le "Contrat" par la signature : Si une vue demande
user: CurrentUser, Axum garantit que l'utilisateur est authentifié. Si ce n'est pas le cas, la vue n'est pas appelée et une erreur 401 est retournée automatiquement. - Auto-documentation : En regardant simplement la signature d'une fonction, on sait exactement ce dont elle a besoin (Base de données, Utilisateur, JSON, etc.).
2. Le Flux d'Authentification
- Middleware (
context_middleware) : Intercepte la requête, vérifie le JWT, récupère l'utilisateur complet en base de données, et injecte le tout dansRequestContext. - Extensions : Le
RequestContextest stocké dans les "extensions" de la requête (un espace de stockage de type Map). - Extracteurs : L'extracteur
CurrentUserrécupère les données depuis les extensions et les rend disponibles dans la signature de votre vue.
3. Transparence (Deref)
L'objet CurrentUser enveloppe le modèle de base de données. Grâce à l'implémentation de Deref, vous pouvez accéder
aux champs de l'utilisateur (ex: user.is_superuser) directement comme s'il s'agissait du modèle lui-même.
Documentation
- API (REST & WebSocket) :
/swagger-uiou/scalar- La documentation du WebSocket est incluse dans l'OpenAPI via une route descriptive
/handler/ws/.
- La documentation du WebSocket est incluse dans l'OpenAPI via une route descriptive
TODO
Terminer le système d'authentification (login, changement de mot de passe...)