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!