På https://wallnot.dk/count har jeg oprettet en besøgstæller.
Den tæller besøg på siden, når:
- Den nyeste besøgende ikke er den samme som den sidste besøgende
Datamodellen i models.py definerer en tæller, ip-adressen på sidste besøgende og tidspunkt for sidste opdatering af tælleren:
from django.db import models from django.utils import timezone class Counter(models.Model): count = models.PositiveIntegerField('Besøgende nummer') last_ip = models.GenericIPAddressField('Sidste besøgendes IP-adresse') date = models.DateTimeField(default=timezone.now, editable=False)
I views.py definerer jeg logikken bag, hvornår der skal opdateres. Jeg bruger et modul til Django for at finde brugerens IP:
from django.shortcuts import render from .models import Counter from ipware import get_client_ip def countindex(request): # Get current count try: counter = Counter.objects.get(pk=1) # If a count does not exist (first visit to site), one is created except: firstcount = Counter(count=0, last_ip='0.0.0.0' ) firstcount.save() counter = Counter.objects.get(pk=1) # Get user IP client_ip, is_routable = get_client_ip(request) # If user IP exists, check whether user is identical to last user # (If no user IP, nothing happens) if client_ip is not None: # Check whether user is identical to last user try: Counter.objects.get(last_ip=client_ip) # If not, one is added to visitor count and IP is saved except: counter.count += 1 counter.last_ip = client_ip counter.save() context = {'ip': client_ip, 'counter': counter} return render(request, 'vcounter/index.html', context)
Endelig har jeg min skabelon index.html som viser brugeren hvad nummer besøgende, hun er, og hendes IP-adresse:
<h1>Du er besøgende nummer<br> <strong>{{ counter.count }}</strong></h1> (Dit ip-nummer er: {{ ip }})
Voila!