2009-12-03 12 views

risposta

3

Si può sempre modificare this line a:

new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'], 
             password=self.cleaned_data['password1'], 
             email=self.cleaned_data['email'], 
             profile_callback=profile_callback, 
             send_email = False) 

Oppure si potrebbe cambiare this line a:

def create_inactive_user(self, username, password, email, 
         send_email=False, profile_callback=None): 
+2

È necessario chiamare activate_user se (altrimenti l'account dell'utente sarà inutilizzabile) – Jiaaro

+1

Nella nuova versione del django-registro, file di forms.py doesn' t così fino ad ora. Controlla questo link: http://bitbucket.org/ubernostrum/django-registration/src/tip/registration/forms.py – anhtran

+0

questo è davvero semplice da fare senza modificare il codice. oh scatto. non mi rendevo conto di quanti anni avesse questa risposta ... – teewuane

1

Invece di modificare l'applicazione di registrazione, perché non basta attivare l'utente del same way django-registration does:

user.is_active = True user.save() profile.activation_key = "ALREADY_ACTIVATED" profile.save()

Dopo aver guardato ancora di più ... Penso che quello che si desidera è di utilizzare sia soluzioni. Probabilmente aggiungere il codice di cui sopra, solo dopo la modifica suggerita da Dominic (anche se io suggerirei di usare i segnali, o sottoclasse forma se possibile)

OK Risposta finale:

new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'], 
            password=self.cleaned_data['password1'], 
            email=self.cleaned_data['email'], 
            profile_callback=profile_callback, 
            send_email = False) 
RegistrationProfile.objects.activate_user(new_user.activation_key) 
+0

Ho capito male? Non ho provato il mio codice, ho solo dato un'occhiata al codice nella registrazione di Django. –

+0

No, ho appena modificato la mia risposta perché penso che entrambe le nostre soluzioni siano necessarie :) – Jiaaro

+0

dove va? conosci un modo per farlo senza modificare il codice di registrazione di Django? Sto pensando come un segnale a quando l'utente viene creato .. – teewuane

6

meglio per risolvere il problema la radice di benda chiamando comandi per attivare automaticamente l'utente.

Aggiungi questo metodo per models.py registrazione:

def create_active_user(self, username, email, password, 
          site): 
     """ 
     Create a new, active ``User``, generate a 
     ``RegistrationProfile`` and email its activation key to the 
     ``User``, returning the new ``User``. 
     """ 
     new_user = User.objects.create_user(username, email, password) 
     new_user.is_active = True 
     new_user.save() 

     registration_profile = self.create_profile(new_user) 

     return new_user 
    create_active_user = transaction.commit_on_success(create_active_user) 

Poi, modificare registrazione/backend/default/init .py e trovare il metodo register().

Modificare la seguente per chiamare il nuovo metodo:

#new_user = RegistrationProfile.objects.create_inactive_user(username, email, 
                  #password, site) 
new_user = RegistrationProfile.objects.create_active_user(username, email, 
                  password, site) 
+0

ho seguito la tua procedura ma quando inserisco l'utente non viene come attivato. – XMen

13

Nelle versioni di punta attuali di django-registrazione v'è un semplice back-end senza e-mail e si può scrivere il proprio back-end per specificare il flusso di lavoro che si desidera . Vedi qui https://bitbucket.org/ubernostrum/django-registration/src/fad7080fe769/docs/backend-api.rst per la documentazione.

Per utilizzare quello semplice senza e-mail, basta cambiare il tuo urls.py per puntare a questo back-end, ad es.

(r'^accounts/', include('registration.backends.simple.urls')),  
+0

questa è la risposta corretta –

7

Perché non utilizzare this method e basta usare la semplice back-end che viene fornito con Django-registrazione al posto del backend predefinito?

Il nuovo flusso di lavoro sarà ... 1. Un utente si iscrive compilando un modulo di registrazione. 2. L'account dell'utente viene creato ed è attivo immediatamente, senza alcuna conferma intermedia o fase di attivazione. 3. Il nuovo utente ha effettuato l'accesso immediatamente.

così sui tuoi URL principali.py cambieresti:

url(r'^accounts/', include('registration.backends.default.urls')), 

a

url(r'^accounts/', include('registration.backends.simple.urls')), 
Problemi correlati