2016-03-28 10 views
1

Auf meiner Django-Site möchte ich ein Objekt erstellen, wenn der Benutzer sich auf der Site anmeldet. Ich habe es im Internet gesucht und beschlossen, eine Methode in context_processors.py zu schreiben. also schrieb ich;Aufrufen einer Methode beim Anmelden des Benutzers Django

def check_online_status(request): 
    user_status = None 
    if request.user.is_authenticated(): 
     user_status = UserStatus.objects.create(user_id=request.user.id) 
     user_status.status_type = "online" 
     user_status.save() 

return { 
    'user_status': user_status, 
} 

Hier ist es das Problem; Meine check_online_status() -Methode wird in jeder Anfrage ausgelöst, aber ich möchte meine Methode sofort auslösen, nur wenn sich der Benutzer anmeldet.

Können Sie mir helfen, es zu tun?

Antwort

4

Ich denke, was Sie suchen, ist ein Signal, insbesondere ein Auth-Signal. Diese sind bereits im Django enthalten.

https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signals

from django.contrib.auth.signals import user_logged_in 


    def set_status_online(sender, user, request, **kwargs): 
     user_status = UserStatus.objects.create(user_id=request.user.id) 
     user_status.status_type = "online" 
     user_status.save() 

    user_logged_in.connect(set_status_online) 
Verwandte Themen