2009-05-20 9 views

Antwort

1

Middleware, die auf request.path schaut, ist hässlich, da sie eine Abhängigkeit von den Details der URL-Muster verursacht, die Sie zum Anzeigen von Artikeln und Blog-Posts verwenden. Wenn Sie diese Kopplung nicht stören, können Sie auch den Performance-Hit speichern und Ihre Analyse auf Webserver-Log-Dateien durchführen. (EDIT: view middleware wäre eine bessere Option, da es Ihnen die Ansicht aufrufbar und seine Args. Ich würde immer noch die Decorator-Ansatz bevorzugen, da es keine Overhead auf unabhängige Ansichten, aber View Middleware würde funktionieren, wenn Sie nicht tun möchte die URLconf für die Blog/Artikel Anwendungen berühren).

Ich würde einen Ansichtsdekorator verwenden, den Sie um die Ansicht object_detail (oder Ihre benutzerdefinierte Entsprechung) wickeln. Sie können dieses Wrapping direkt in der URLconf durchführen. Etwas wie folgt aus:

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

Und Sie können es in views.py gelten:

@count_hits 
def detail_view(... 

oder in Ihrem URLconf:

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

Sie ein generisches Modell Hit

schaffen könnte
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') 

in Ihrer view.py schreiben Sie diese Funktion:

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) 

und die Ansichten, die Sie im Gegenzug interessiert sind

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

Dieser Ansatz gibt Ihnen die Macht, nicht nur den Treffer zu zählen, aber die Treffer-Geschichte von Zeit zu filtern, content und so auf ...

Da der Hit-Tabelle schnell wachsen kann, sollten Sie über eine Löschstrategie nachdenken.

Code nicht getestet

Verwandte Themen