2016-07-20 16 views
0

Wie die Frage sagt, möchte ich eine Variable auf Benutzersitzung setzen, wenn der Benutzer geloggt wird und diese Variable beim Abmelden oder Schließen des Browsers entfernen.Wie erstellt man eine Middleware, die beim Anmelden in Django eine Sitzungsvariable setzt?

Ursprünglich dachte ich, meine benutzerdefinierte Login-Ansicht zu schreiben, um dies zu erreichen, aber wahrscheinlich eine Middleware ist eine bessere Lösung.

+0

http://stackoverflow.com/questions/14465993/how-can-i-set-and-gets-session-variable-in-django –

+0

diese Antwort ist über eine Variable zu Sitzung setzen, meine Frage bezieht sich auf Middleware. @AK dankt für die Down-Abstimmung über eine nützliche Frage – realnot

+0

Django haben Standard-Session-Middleware. Warum musst du einen anderen benutzen? –

Antwort

0

Die Middleware war nicht der richtige Weg, um die Lösung zu erreichen. Ich entdecken die Signale und ich meine Lösung auf diese Weise umgesetzt:

@receiver(user_logged_in) 
def sig_user_logged_in(sender, user, request, **kwargs): 
    moderator = get_or_none(CompanyModerator, moderator__user=request.user) 
    if moderator: 
     if 'company_id' not in request.session: 
      request.session['company_id'] = moderator.company.id 

Der Unterschied besteht darin, dass eine Middleware auf jeder django Anfrage ausgelöst wird, wenn die Bedürfnisse waren nur etwas tun, wenn der Benutzer/out-in protokolliert werden. Jedes Mal, wenn sich ein Benutzer an- oder abmeldet, fügen wir der Sitzung Daten/Objekt-Modelle usw. hinzu, um den Benutzer rund um die Website zu verfolgen.

Was denkst du?

1

Nachdem ich alle Kommentare zu Ihrer Frage durchgegangen bin, würde ich dasselbe sagen wie @akhil viswam in seinem letzten Kommentar.

Aber jetzt, da Sie angegeben haben, dass Sie einige benutzerdefinierte Aufgaben tun wollen, dann können Sie Ihre eigenen kundenspezifischen Middleware wie dieses schreiben ->https://github.com/ankushrgv/notification/blob/master/apps/accounts/middlewares.py

und dann schließen Sie es in Ihrem settings.py wie dieser ->https://github.com/ankushrgv/notification/blob/master/config/settings.py

Im Grunde schrieb ich die Schlüsselwertpaare user_id: session_id in Redis und las sie dann in meinen Ansichten, um Echtzeitbenachrichtigungen anzuzeigen, aber nur für die angemeldeten Benutzer.

Ich hoffe, dies wird Ihnen eine gute Idee, wie Sie Ihre eigene benutzerdefinierte Middleware schreiben.