Post-metodi per integrare la registrazione pigra con django-registrazione
-
27-10-2019 - |
Domanda
Sto utilizzando il tutorial su questolink per eseguire la mia registrazione pigra e sto cercando di combinarlo con django-registration.
Il tutorial al collegamento di registrazione lenta deve semplicemente chiamare un comando per re-genitore degli eventi salvati:
def on_registration_complete(self, request):
Wishlist.reparent_all_my_session_objects(request.session, request.user)
return HttpResponseRedirect('/')
def on_login_complete(self, request, user, openid=None):
Wishlist.reparent_all_my_session_objects(request.session, request.user)
return HttpResponseRedirect('/')
Come faccio a eseguire un post-hook con django-registration per chiamare il comando reparent_all_my_session_objects()
dopo che l'utente ha effettuato l'accesso o si è registrato?Devo creare la mia autenticazione copiando da django.contrib.auth ?
Soluzione
Devi creare i tuoi ricevitori di segnale al momento della registrazione e del login.
# Handle the signal sent by user_login
from registration.signals import user_login, user_registered
from events.models import Event
from django.contrib.auth import authenticate, login
# Use the signal sent after the login wrapper
def user_login_handler(sender, **kwargs):
"""signal intercept for user_login"""
request = kwargs['request']
Event.reparent_all_my_session_objects(request.session, request.user)
def user_registered_handler(sender, **kwargs):
"""signal intercept for user_registered"""
request = kwargs['request']
# Authenticate user, so that a User model (instead of AnonymousUser) is assigned to Event
# Registration form validates password1==password2
new_user = authenticate(username=request.POST['username'], password=request.POST['password1'])
login(request, new_user)
Event.reparent_all_my_session_objects(request.session, new_user)
user_login.connect(user_login_handler)
user_registered.connect(user_registered_handler)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow