Plateforme de Données Immobilières DVF
Site web permettant la consultation et l'analyse des données officielles de transactions immobilières françaises (Demande de Valeurs Foncières)
Architecture Technique
Backend
- Framework : Django
- Base de données : SQLite avec optimisations (WAL mode, cache_size, mmap_size)
- Cache : Redis avec django-redis pour la mise en cache des requêtes fréquentes
- Tâches asynchrones : Celery avec Celery Beat pour les tâches planifiées
- Stockage fichiers : MinIO/S3 via django-storages pour les médias
- API REST : Django REST Framework pour les endpoints API
Frontend
- Framework CSS : Tailwind CSS compilé via django-tailwind
- Interactivité : HTMX pour les interactions dynamiques sans rechargement de page
- Templates : Système de templates Django avec héritage et inclusions
- JavaScript : Vanilla JavaScript pour l'autocomplétion et les graphiques
Fonctionnalités Principales
Recherche Intelligente de Communes
- Système de recherche multi-critères avec autocomplétion en temps réel
- Recherche par nom, code INSEE, code postal avec priorisation des résultats
- Normalisation des requêtes (suppression d'espaces multiples, gestion de la casse)
- Recherche par mots-clés multiples avec combinaison logique AND
- Suggestions affichées via API JSON et injection HTML dynamique
Navigation Géographique
- Hiérarchie : Régions → Départements → Communes → Voies
- URLs SEO-friendly avec slugs normalisés
- Validation des relations géographiques pour éviter les erreurs 404
- Pagination optimisée pour les grandes listes (communes, voies, transactions)
Affichage des Données Immobilières
- Statistiques pré-calculées : Stockage des statistiques dans des modèles dédiés pour performances optimales
- Données par type de bien : Maisons, appartements, locaux commerciaux
- Indicateurs : Prix moyen/médian au m², nombre de ventes, évolution en pourcentage
- Graphiques d'évolution : Visualisation temporelle des prix avec données mensuelles/trimestrielles
- Transactions récentes : Affichage des 20 dernières transactions avec détails complets
- Statistiques par voie : Agrégation des ventes par rue/avenue avec calculs optimisés via ORM
Modèles de Données DVF
- Modèles dynamiques par année (DVF2020, DVF2021, DVF2022, DVF2023, DVF2024, DVF2025)
- Fonction factory pour récupérer le modèle approprié selon l'année
- Indexation sur code_insee, code_commune, voie_slug pour performances
- Calcul automatique du prix au m² côté requête et pré-calcul pour les statistiques
Calculs Statistiques
- Statistiques globales : Agrégation pour chaque commune, département, région
- Évolution temporelle : Comparaison année N vs année N-1 avec calcul de pourcentage
- Prix médians : Calcul de la médiane pour éviter les biais des valeurs extrêmes
- Optimisations : Utilisation de select_related, prefetch_related, only() pour limiter les requêtes
- Agrégation ORM : Utilisation d'annotate() et aggregate() pour calculs en base de données
Communes Voisines
- Détection géographique via coordonnées GPS (latitude/longitude)
- Calcul de distance avec formule de Haversine
- Rayon de recherche configurable (par défaut 20km)
- Affichage des statistiques comparatives des communes proches
Système de Blog Intégré
- Gestion de contenu : Articles avec catégories, tags, auteurs
- Recherche HTMX : Recherche dynamique sans rechargement dans le blog
- Gestion des médias : Images optimisées avec Pillow, stockage S3
- SEO : Meta tags dynamiques, temps de lecture estimé
- Pagination : Système de pagination pour listes d'articles
Outils Immobiliers
- Calculateur de rentabilité : Outil de calcul pour investissements immobiliers
- Simulateur de prêt : Calcul des mensualités de prêt immobilier
- Comparateur de prix : Comparaison entre différentes zones géographiques
Optimisations et Performance
Cache
- Cache de page avec cache_page() pour la page d'accueil (1 heure)
- Redis pour cache distribué en production
- Cache des requêtes fréquentes (villes populaires, statistiques)
Optimisation des Requêtes
- select_related() pour les jointures ForeignKey
- prefetch_related() pour les relations ManyToMany et reverse ForeignKey
- only() et defer() pour limiter les champs chargés
- Indexation sur champs fréquemment recherchés
- Agrégation en base de données plutôt qu'en Python
Base de Données
- Mode WAL (Write-Ahead Logging) pour meilleures performances en lecture/écriture simultanées
- Configuration du cache SQLite (cache_size=2000 pages)
- MMap pour les grandes bases de données (mmap_size=128MB)
- Index composés sur combinaisons fréquentes de champs
Tâches Asynchrones (Celery)
- Import de données DVF : Tâche planifiée pour importer les nouvelles données (tous les 6 mois)
- Calcul de statistiques : Calcul automatique des statistiques communes
- Récupération d'informations : Mise à jour des données géographiques des communes et départements
- Publication réseaux sociaux : Génération et publication automatique de posts (Twitter/Bluesky)
Sécurité et Production
- HTTPS : Configuration SSL avec SECURE_SSL_REDIRECT
- HSTS : HTTP Strict Transport Security activé
- Cookies sécurisés : CSRF et Session cookies en mode sécurisé
- Headers sécurité : X_FRAME_OPTIONS pour protection clickjacking
- Gestion des logs : Système de logging structuré avec colorlog
SEO et Accessibilité
- Schema.org : Données structurées FAQPage et WebSite avec SearchAction
- Meta tags dynamiques : Title, description, Open Graph, Twitter Cards personnalisés par page
- Sitemap : Génération automatique de sitemap XML
- URLs optimisées : Slugs normalisés, structure hiérarchique claire
- Robots.txt : Configuration pour les moteurs de recherche
Données et Volume
- 35 000+ communes : Couverture complète de la France métropolitaine et DOM-TOM
- 5 années de données : Historique complet de 2020 à 2024
- Millions de transactions : Base de données contenant toutes les transactions DVF officielles
- Statistiques pré-calculées : Modèle StatistiqueCommune pour accès rapide
- Données géographiques : Coordonnées GPS, contours GeoJSON, informations administratives
Architecture Modulaire
- mainSite : Application principale pour la consultation des données immobilières
- blog : Module de blog avec articles, catégories, tags, auteurs
- outils : Modules d'outils de calcul immobilier
- api : API REST pour accès programmatique aux données
- theme : Configuration Tailwind CSS
Technologies et Bibliothèques
- Backend : Django, Celery, Redis, django-redis, django-celery-beat
- API : Django REST Framework
- Frontend : Tailwind CSS, HTMX
- Stockage : django-storages, boto3
- Images : Pillow pour traitement d'images
- Visualisation : Matplotlib pour génération de graphiques
- Logging : colorlog pour logs colorés en développement