Kategorier
blandet

En enkel besøgstæller

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!