2009-05-20 6 views

Répondre

1

Le middleware qui s'intéresse à request.path est moche, car il introduit une dépendance aux détails des modèles d'URL que vous utilisez pour afficher les articles et les billets de blog. Si ce couplage ne vous dérange pas, alors vous pourriez tout aussi bien sauvegarder la performance et faire votre analyse sur les fichiers journaux du serveur Web. (EDIT: view middleware serait une meilleure option, car il vous donne la vue appelable et ses args.Je préfère toujours l'approche décorateur car il n'engendre pas de frais généraux sur les vues sans rapport, mais voir middleware fonctionnerait si vous ne le faites pas vouloir toucher l'URLconf pour les applications de blog/article).

J'utiliserais un décorateur de vue que vous envelopperiez dans la vue object_detail (ou votre équivalent personnalisé). Vous pouvez faire ce wrapping directement dans l'URLconf. Quelque chose comme ceci:

def count_hits(func): 
    def decorated(request, *args, **kwargs): 
     # ... find object and update hit count for it... 
     return func(request, *args, **kwargs) 
    return decorated 

Et vous pouvez l'appliquer à views.py:

@count_hits 
def detail_view(... 

ou dans votre URLconf:

url(r'^/blog/post...', count_hits(detail_view)) 
0

vous pouvez créer un modèle de réussite générique

class Hit(models.Model): 
    date = models.DateTimeFiles(auto_now=True) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

dans votre view.py vous écrivez cette fonction:

def render_to_response_hit_count(request,template_path,keys,response): 
    for key in keys: 
     for i in response[key]: 
      Hit(content_object=i).save() 
    return render_to_response(template_path, response) 

et les vues que vous êtes intéressé par le retour

return render_to_response_hit_count(request, 'map/list.html',['list',], 
     { 
      'list': l, 
     }) 

Cette approche vous donne le pouvoir, non seulement de compter le coup, mais pour filtrer le hit-histoire par le temps, contenttype etc. sur ...

Comme la table de correspondance peut être en croissance rapide, vous devriez penser à une stratégie de suppression.

code non testé

Questions connexes