Ich lerne zu programmieren und habe ein Live-Django-Projekt, um mich motiviert zu halten. In meiner Django-App hinterlassen Benutzer Kommentare, während andere auf die genannten Kommentare antworten.Django Signale für die Verarbeitung eines einfachen Benutzerbenachrichtigungssystem
Jedes Mal, wenn ein Benutzer seine Homepage aktualisiert, errechne ich, ob er neue Antworten auf seine zuvor hinterlassenen Kommentare erhalten hat, und zeigt eine Benachrichtigung an, falls dies der Fall ist.
Dies skaliert nicht, denn wenn ein Benutzer eine Tonne Kommentare hinterlassen hat und daher eine Menge Antworten erhalten hat, dauert die Berechnung länger als für lurkers, die keinen Inhalt erstellen. Ich möchte die Erfahrung für diese Content-Ersteller verbessern.
Lesen deeper into it, ich habe festgestellt, Django Signale sind der Weg zu gehen. Zum Beispiel kann jedes Mal, wenn eine neue Antwort hinterlassen wird, ein Signal post_save() ausgelöst werden, das empfangen werden kann und die Benachrichtigung für den Benutzer aktualisieren kann. Auf diese Weise werden die Benachrichtigungen aktualisiert, sobald die Antworten verfügbar sind - so wie es sein sollte.
Ich muss meinen Code umgestalten, und ich bin immer noch verschwommen auf die Implementierungsdetails der oben genannten. Kann mir jemand ein kurzes anschauliches Beispiel dafür geben, wie ich das oben genannte erreichen kann? Es wird mich beginnen.
Derzeit Benutzerantwortverarbeitung in der form_valid
Methode eines CBV in meinem views.py class PublicreplyView(CreateView)
behandelt. Ich schätze, ich kann das folgende als eine Methode in meinem CBV einschließen?
from django.db.models.signals import post_save post_save.connect(form_valid, sender=User)
Und dann an anderer Stelle habe ich eine andere CBV, die die Benachrichtigungen für jeden Benutzer verarbeitet, sobald sie die Homepage aktualisieren. Ich denke, ich muss das komplett neu schreiben. Wie ich schon sagte, ich bin an dieser Front verschwommen.
Würde mich freuen, jemanden zu führen, was ich mit einem illustrativen, einfachen Beispiel tun soll. Vielen Dank!
p.s. Ich bin auf Django < 1.8.
Es ist eine gute Frage, aber es ist ziemlich breit, vielleicht zu breit für SO. Wenn Sie Ihre Beschreibung des Problems lesen, klingt es so, als würden Sie etwas übersehen: Wenn Sie die Benachrichtigungen nicht jedes Mal neu berechnen möchten, wenn die Seite angezeigt wird, müssen Sie sie speichern. Das bedeutet, dass Sie in Ihrem post_save die Benachrichtigungen für den Benutzer irgendwo in DB speichern/aktualisieren. Und wenn (s) er die Startseite sieht, den gleichen Wert in der DB aktualisieren (verringern). – Djizeus
@Djizeus: Wie wäre es, wenn ich 'post_save' für die Methode' form_valid' eines CBV verwende? Ist das korrekt? –