
PROJET ETUDIANT : Application web avec Django
Dans ce projet, j’ai travaillé sur la conception d’une application web avec Django intégrant un système complet d’authentification, de création de contenus et d’interactions sociales.
Ce projet m’a permis de concevoir une architecture backend robuste en Django, en mettant en œuvre les vues basées sur les fonctions (FBV), les formulaires Django, la gestion des permissions et la protection contre les attaques CSRF. J’ai travaillé sur la modélisation des relations entre utilisateurs (abonnements), la gestion des médias (upload et affichage d’images), ainsi que la construction d’un feed combinant plusieurs types de contenus ordonnés chronologiquement.
J’ai également porté une attention à la qualité de l’interface utilisateur : structuration des templates, factorisation des composants, accessibilité conforme aux recommandations WCAG (contrastes, navigation clavier, sémantique HTML) et responsive design.
Enfin, ce projet m’a permis d’approfondir des notions clés telles que la validation des formulaires, la pagination, la personnalisation des messages d’erreur et la séparation claire des responsabilités entre modèles, vues et templates (MVT).
Problématiques rencontrées :
1. Sécurité des accès par URL
Problème :
Les actions sensibles (modifier/supprimer un ticket ou une review) restaient accessibles via URL directe, même sans bouton visible.
Solution :
Vérification côté vue avec filtrage par user=request.user.
Ce que j’ai appris :
-
La sécurité ne doit jamais reposer sur le template
-
Toujours valider les permissions côté serveur
-
Importance de
get_object_or_404avec conditions
2. Création multiple de reviews sur un même ticket
Problème :
Un utilisateur pouvait créer plusieurs critiques pour un même ticket via accès direct à l’URL.
Solution :
Ajout d’une vérification avec .filter(...).exists() avant création.
Ce que j’ai appris :
-
Implémenter des règles métier côté backend
-
Anticiper les contournements via requêtes directes
-
Différence entre validation UI et validation serveur
3. Gestion d’un feed combinant plusieurs modèles
Problème :
Fusionner et trier des tickets et des reviews dans un seul flux.
Solution :
Concaténation des QuerySets + tri sur un attribut commun (time_created).
Ce que j’ai appris :
-
Manipulation de collections hétérogènes
-
Importance d’un attribut commun pour le tri
-
Limites de cette approche (performance, pagination)
4. Validation des formulaires et UX
Problème :
Messages d’erreur peu clairs et validation incomplète (ex : mot de passe).
Solution :
Utilisation des validateurs Django + personnalisation des messages.
Ce que j’ai appris :
-
Fonctionnement du cycle
clean()dans les forms -
Différence entre validation Django et validation personnalisée
-
Importance de l’UX dans les formulaires
5. Accessibilité (WCAG)
Problème :
Rendre l’application utilisable pour tous (contrastes, navigation, lisibilité).
Solution :
Amélioration des contrastes, balises sémantiques, mode “contraste +”.
Ce que j’ai appris :
-
Bonnes pratiques WCAG
-
Importance de la sémantique HTML
-
Impact de l’accessibilité sur l’UX globale
En quelques mots-clés :
Backend / Django
- Django
- Python
- Architecture MVC / MTV
- Function-Based Views (FBV)
- Django Forms / ModelForms
- Validation des formulaires
- Authentification utilisateur
- Permissions et sécurité
- CSRF protection
- ORM Django
- Relations One-to-Many / Many-to-Many
- Pagination
- Upload et gestion de fichiers médias
Frontend / UI
- HTML5 sémantique
- CSS
- Responsive design
- Accessibilité web (WCAG)
- Contrastes et lisibilité
- UI/UX
- Templates Django
- Composants réutilisables
Méthodologie
- Séparation des responsabilités
- Clean code
- Factorisation CSS
- Gestion des erreurs
- Debugging
- Documentation (README)
- Développement full-stack
V01
Le code source : repository GitHub
Exemple d’exécution :

A bientôt ! 😉
