from django.db import models from django.conf import settings from django.utils import timezone class SiteSettings(models.Model): site_name = models.CharField(max_length=200, default="Mon Super Site") site_logo = models.ImageField(upload_to='settings/', blank=True) contact_email = models.EmailField(blank=True) # Réseaux sociaux facebook_url = models.URLField(blank=True) twitter_url = models.URLField(blank=True) youtube_url = models.URLField(blank=True) instagram_url = models.URLField(blank=True) linkedin_url = models.URLField(blank=True) github_url = models.URLField(blank=True) # Blog blog_title = models.CharField(max_length=200, default="Blog du développeur") blog_description = models.TextField(blank=True, default="Je documente la construction de PartirDeZero.com : mes choix techniques, mes bugs résolus et mes conseils pour lancer tes propres projets web. Apprends en regardant faire.") # L'astuce pour qu'il n'y ait qu'un seul réglage def save(self, *args, **kwargs): self.pk = 1 # On force l'ID à 1. Si tu sauvegardes, ça écrase l'existant. super(SiteSettings, self).save(*args, **kwargs) def delete(self, *args, **kwargs): pass # On empêche la suppression. On ne peut pas supprimer les réglages. def __str__(self): return "Configuration Générale" class Meta: verbose_name = "Réglages du site" verbose_name_plural = "Réglages du site" class Visit(models.Model): """Enregistrement simplifié des visites (agrégées par jour et visiteur). Objectif: fournir des stats de base sans dépendances externes. """ visitor_id = models.CharField(max_length=64, db_index=True) user = models.ForeignKey( settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL, related_name='visits' ) date = models.DateField(db_index=True) first_seen = models.DateTimeField(default=timezone.now) last_seen = models.DateTimeField(default=timezone.now) path = models.CharField(max_length=512, blank=True) referrer = models.CharField(max_length=512, blank=True) utm_source = models.CharField(max_length=100, blank=True) utm_medium = models.CharField(max_length=100, blank=True) utm_campaign = models.CharField(max_length=150, blank=True) source = models.CharField(max_length=150, blank=True, help_text="Domaine de provenance ou utm_source") country = models.CharField(max_length=64, blank=True) # Conversion: première fois où un visiteur devient utilisateur authentifié became_user_at = models.DateTimeField(null=True, blank=True) class Meta: unique_together = ('visitor_id', 'date') ordering = ['-date', '-last_seen'] def __str__(self): return f"{self.visitor_id} @ {self.date}"