Ich bin neu und verwirrt. Ich möchte ein Modul erstellen, das die Top-Hit-Instanzen eines Artikels und eines Blog-Modells verfolgt. Ich möchte nicht den Code für den Artikel oder Blog-Modelle berühren. Ist das ein Kandidat für Middleware? Blick auf die HttpRequest.path
?Django - Zählung Modell Instanzansichten (für eine "Top-Einträge" App)
Antwort
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))
Sie ein generisches Modell Hit
schaffen könnteclass 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
- 1. django: LookupError: App 'hat kein ‚Modell‘ Modell
- 2. Django bedingte Zählung
- 3. Django ausschließen Anmerkung Zählung
- 4. Django Formular Create für Modell innerhalb Modell
- 5. Django Modell Design Fragen
- 6. django erweitern installiert App-Modell speichern Methode
- 7. django mit Anmerkungen versehen - bedingte Zählung
- 8. Django-Dump-Daten für ein einzelnes Modell?
- 9. Django admin: Benutzerberechtigungen für Proxy-Modell
- 10. Gibt es eine Möglichkeit, eine Meta-Berechtigung für jedes Modell in einer Django-App anzuwenden?
- 11. eine tastypie Ressource für eine Multi-Table-Erbe Django Modell
- 12. Speichern Sie eine Klassenmethode in Django-Modell
- 13. Django - Wie spezifiziert man eine Datenbank für ein Modell?
- 14. Django Detailansicht dynamisches Modell
- 15. Django-Modell für Stadt und Orte
- 16. django Benutzer geerbt Modell
- 17. Ist eine "Django-Modell" -Typ-Abstraktion für C++ verfügbar?
- 18. Django Abfrage mit einer Zählung auf Unterabfrage
- 19. Holen Sie sich die Liste der Vorkommen + Zählung in einem Modell Django?
- 20. Django-Modell mit forms.ModelMultipleChoiceField
- 21. Django: Beste Badge-App für Django-Projekt
- 22. Funktion für jeden ein django-Modell
- 23. zwei Admin-Klassen für ein Modell django
- 24. Django Datatables von Modell
- 25. Suche mehrere Felder von Django Modell ohne 3rd Party App
- 26. Django-Modell Instanzvariablen für transiente Verwendung
- 27. Django Template-Tag für Modell Abfrageergebnis
- 28. Standardwert für das Feld in Django Modell
- 29. Django-cms Plugin für vorhandenes Modell
- 30. Automatisches Erstellungsdatum für Django-Modell-Formularobjekte?