2010-08-04 6 views
5

Je souhaite avoir un compteur de pages qui affiche le nombre de visiteurs ayant consulté une page particulière sur mon site. Est-il possible de le faire en utilisant Django?Compteur des pages dans Django

+1

Merci pour vos conseils ..... Je suis désolé mais mon anglais est peu – mohammadmonther

Répondre

9

Il existe une application Django pour ce problème appelée django-hitcount. Il est facile à utiliser et réutilisable dans tous vos projets.

+0

ses bons outils im utilisé merci beaucoup – mohammadmonther

+0

bonne application, merci beaucoup! – inoks

9

Un "compteur de pages", c'est quoi? Une donnée persistante qui est mise à jour par les fonctions d'affichage et affichée par un modèle.

Comme vous le savez sans doute, toutes les choses Django ont les parties suivantes.

  1. Modèle
  2. Voir Fonction
  3. Modèle

Modèle

Si vous voulez garder le compteur de pages dans la base de données, vous avez besoin d'un modèle Django.

class PageCounter(Model): 

Vous devez mettre une ligne dans ce modèle. Habituellement, un "appareil" aidera à faire cela, car c'est une ligne et vous ne le mettez en une seule fois en faisant une syncdb.

Voir Fonction

Ensuite, vous devez chercher et mettre à jour le compteur de pages dans votre fonction de vue.

pageCounter= PageCounter.objects.all()[0] 
pageCounter.count += 1 
pageCounter.save() 

Modèle

Maintenant, vous devez fournir la valeur à vos modèles afin qu'il puisse être affiché.

+0

merci pour cette idée ... – mohammadmonther

+3

qu'en est-il des actualisations de page? – maazza

+0

ouais @Lott qu'en est-il des rafraîchissements de page, pouvons-nous faire -> créer un champ avec manytomany relation avec l'utilisateur dans la poste et incrémenter le compteur d'utilisateur dans la vue détaillée de la poste, puis nous pouvons afficher les vues en comptant le nombre des utilisateurs dans le domaine, Mais cela ne fonctionnera pas pour Utilisateur anonyme – babygame0ver

1

Je sais que c'est un vieux message mais parfois les gens pourraient avoir la même question.

Si vous voulez éviter une bibliothèque tiers et éviter que le compteur étant mis à jour à chaque rafraîchir la page, vous pouvez effectuer les opérations suivantes mixin (bâtiment sur la réponse de S. Lott)

class BlogPostCounterMixin(object): 
    def get_context_data(self, **kwargs): 
     context = super(BlogPostCounterMixin, self).get_context_data(**kwargs) 
     blog_post_slug = self.kwargs['slug'] 
     if not blog_post_slug in self.request.session: 
      bp = BlogPost.objects.filter(slug=blog_post_slug).update(counter=+1) 
      # Insert the slug into the session as the user has seen it 
      self.request.session[blog_post_slug] = blog_post_slug 
    return context 

Il vérifie si le modèle accessible a été stocké dans la session. S'il a été stocké dans la session, il ignore l'incrémentation, sinon il incrémente le compteur et ajoute le slug du modèle à la session, ce qui empêche les incréments pour les actualisations de page.

Remarque: Ceci est un Mixin dont vous avez besoin pour ajouter à votre vue.

Questions connexes