Ajout du suivi des visites : modèle Visit, middleware de tracking, mises à jour des vues et du tableau de bord statistiques.
This commit is contained in:
parent
bec74976ba
commit
6e8a2bc287
7 changed files with 286 additions and 5 deletions
|
|
@ -1,4 +1,6 @@
|
|||
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")
|
||||
|
|
@ -30,4 +32,36 @@ class SiteSettings(models.Model):
|
|||
|
||||
class Meta:
|
||||
verbose_name = "Réglages du site"
|
||||
verbose_name_plural = "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}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue