Contador de visitantes


Introducción

En el siguiente ejemplo crearemos un contador de visitas para tener constancia de las visitas que nuestro sitio recibe. Asumiremos que el lector tiene Django instalado y configurado y que posee conocimientos mínimos sobre el mismo.

Aunque el lenguaje de plantillas de Django incorpora varias etiquetas y filtros, es posible que usted quiera escribir los suyos propios, y es fácil hacerlo.

Creando nuestro propio contador de visitas

Primero, debemos crea un paquete (directorio) “templatetags“ dentro del paquete de la aplicación apropiada. Debería estar en el mismo nivel que “models.py“, “views.py“, etc. Por ejemplo:

visitantes/
    models.py
    templatetags/
    views.py

Añadimos dos ficheros al paquete “templatetags“: un “__init__.py“ (para indicar a Python que es un módulo que contiene código de Python) y un fichero que contendrá las definiciones de sus etiquetas y filtros personalizados llamado “my_tags.py“ (puede nombrarse como usted lo desee) y añadimos lo siguiente a “my_tags.py“:

from django import template
register = template.Library()

def contador(request):
	if request.session.get('contador', False):
		contador = GetContador()
		return str(contador)
	request.session['contador'] = True
	contador = GetContador()
	contador = contador + 1
	SetContador(str(contador))
	return str(contador)
	
def GetContador():
	f_contador = open('/path/to/contador/contador', 'r') 
	contador = f_contador.read()
	return int(contador)

def SetContador(contador):
	'''Funcion que guarda la posición actual del visitante'''
	f_contador = open('/path/to/contador/contador', 'w')
	f_contador.write(contador)
	f_contador.close()

register.simple_tag(contador)

Explicación

  1. Para que sea una biblioteca de etiquetas válida, el módulo debe contener una variable llamada “register“ que sea una instancia de “template.Library“, en la que se registran todas las etiquetas y los filtros.
  2. Definimos la función contador que recibe el parámetro “request“.
  3. Comprobamos la sesión, esto es importante para que el contador no se aumente cuando recargamos la página. En este caso si la sesión existe el contador no se aumentará
  4. Obtenemos el valor del contador a través de la función “GetContador()“
  5. Retornamos el valor del Contador sin aumentar.
  6. Si la sesión no existe la creamos.
  7. Obtenemos el valor del contador a través de la función “GetContador()“
  8. Aumentamos el contador en 1.
  9. Guardamos el valor del contador aumentado en uno en el fichero a través de la función “SetContador()“
  10. Retornamos el valor del contador aumentado en 1.
  11. Definimos la función “GetContador()“
  12. Abrimos el fichero contador en modo sólo lectura.
  13. Leemos el contenido del fichero.
  14. Retornamos el valor
  15. Definimos la función “SetContador()“
  16. Abrimos el fichero contador en modo escritura para añadir el nuevo valor
  17. Escribimos el nuevo valor
  18. Por último cerramos el fichero.
  19. Para facilitar la creación de este tipo de etiquetas, Django proporciona una función de conveniencia, “simple_tag“. Esta función es un método de “django.template.Library“, que toma como argumento una función que a su vez acepta un argumento, la inserta en una función “render“, y la registra en el sistema de plantillas.

Debemos crear el fichero contador en la ubicación /path/to/contador/contador.
Ahora nos vamos a la plantilla donde queremos insertar el contador de vistas e insertamos lo siguiente al inicio de la plantilla:

{% load my_tags %}

La etiqueta {% load %} hace una búsqueda según la opción “INSTALLED_APPS“ y sólo permite la carga de bibliotecas de plantillas pertenecientes a aplicaciones instaladas. Esto es una medida de seguridad: le permite tener el código de muchas librerías de plantillas escritas en Python en un único computador sin habilitar a cada instalación de Django el acceso a todas ellas.
Posteriormente en de la misma plantilla anterior donde queremos que el contador sea visible insertamos lo siguiente:

...
...
<tr>
    <td>
    Visitante #: {% contador request %}
    </td>
</tr>
...
...

“contador“ es el nombre de la función que esta dentro de “my_tags.py“ y debe recibir un parámetro “(request)“ que debe ser pasado a la plantilla para comprobar la sesión y así el contador no será aumentado cuando se recargue la página.

Hasta aquí el contador de visita. No soy un experto en Django, quizás existan otros métodos más fáciles pero este ha sido el que he encontrado. Este contador esta implementado

Anuncios

Una respuesta

  1. Esta padre tu contador.

    Entra a mi blog: karate-do-avatar.blogspot.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: