Domanda

Ho una funzione:

def create(sender, **kw):
  [...]

Che dovrebbe essere chiamato quando viene chiamato il segnale User_Activated da Django-Registration.

Collego il segnale e la funzione usando questo:

from registration.signals import user_activated
[...]
post_save.connect(create, sender=user_activated, dispatch_uid="users-atactivation-signal")

Ma la funzione non viene chiamata quando un utente fa clic sul link di attivazione, che ha ricevuto via e -mail.

Cosa mi manca qui.

È stato utile?

Soluzione

Una funzione come questa:

def create(sender, user, request, **kwarg):
[...]

E una chiamata di connessione come questa:

user_activated.connect(create)

fa il lavoro. Li ho nel mio file segnali.py.

Altri suggerimenti

Se l'app Django-Registration non era effettivamente installata, ma piuttosto copiata in un progetto il tuo codice che ascolta i segnali non verrà chiamato correttamente.

Dal django-registrazione v0.8 documentazione:

Ho funzioni ascoltando i segnali di registrazione/attivazione, ma non vengono chiamati!

La causa più comune di ciò è la registrazione di Django in una sotto-directory che si trova sul percorso di importazione Python, anziché installarlo direttamente sul percorso di importazione. L'importazione dalla registrazione Django in quel caso può causare vari problemi, tra cui i gestori del segnale di collegamento erroneamente. Ad esempio, se dovessi inserire Django-Registrazione all'interno di una directory di nome Django_Apps e fare riferimento ad esso in quel modo, finiresti con una situazione in cui il tuo codice lo fa:

from django_apps.registration.signals import user_registered

Ma Django-Registration farà:

from registration.signals import user_registered

Dal punto di vista di Python, queste istruzioni di importazione si riferiscono a due diversi oggetti in due diversi moduli e quindi i gestori del segnale collegati al segnale dalla prima importazione non verranno chiamati quando il segnale viene inviato utilizzando la seconda importazione.

Per evitare questo problema, seguire la pratica standard di installare Django-Registration direttamente sul percorso di importazione e fare sempre riferimento ad esso con il proprio nome del modulo: Registrazione (e in generale, è sempre una buona idea seguire le normali pratiche di Python per l'installazione e utilizzando applicazioni django).

user_activated è esso stesso è un segnale. Quindi devi inviarti, con parametri. Richiede 2 argomenti a parte il mittente, cioè l'utente, la richiesta

user_activated.send(sender=Foo, user=request.user, request=request)

Foo è la classe di backend utilizzata per attivare l'utente.

Il codice che collega il metodo di gestione del segnale a quel segnale è sicuramente caricato? (È possibile testare con un'importazione di stampa immediatamente dopo di essa). Puoi assicurarti di caricare i gestori del segnale per una determinata app importandoli da quell'app __init__.py:

from nameofapp.nameoffilewithhandlersinit import *

Ps. È un errore di battitura nel dispatch_uid o un nome deliberato?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top