Pergunta

Olá, agora estou trabalhando esta base no tutorial de Dmitko sobre estender Post de registro de Django, tudo saiu bem, apenas o que não consigo receber o sinal de user_registered corretamente.

form.py

from django import forms
from registration.forms import RegistrationForm
from models import UserProfile

class UserProfileForm(RegistrationForm):
   fullname = forms.CharField(max_length=200)
   address = forms.CharField(max_length=200)

urls.py

    from django.conf.urls.defaults import *
    from registration.views import register
    from forms import UserProfileForm
    import regbackend
    urlpatterns = patterns('',
      url(r'^accounts/register/$', register, {'backend': 'registration.backends.default.DefaultBackend','form_class': UserProfileForm}, name='registration_register'),
 (r'^accounts/', include('registration.backends.default.urls')),
    )

Regbackend.py

from forms import UserProfileForm
from models import UserProfile

def user_created(sender, user, request, **kwargs):
   form = UserProfileForm(request.POST)
   data = UserProfile(user=user)
   data.fullname = form.cleaned_data["fullname"]
   data.address = form.cleaned_data["address"]
   print "USER CREATED SIGNALS!"
   data.save()

from registration.signals import user_registered
user_registered.connect(user_created)  
print "REGBACKEND!"

Eu posso fazer com que todos eles funcionem bem, mas não consigo me conectar corretamente ao meu método user_created. O método de impressão é apenas uma maneira de verificar os códigos. Não é possível ser usuário para imprimir "Sinais criados pelo usuário!".

Alguma ideia??

Foi útil?

Solução

O ouvinte do Signal deve ser iniciado antes de chamar o sinal - tente importar ragbackend.py no models.py antes de registrar um sinal - se ele começar a funcionar, você terá a pista sobre a solução.

Além disso, não use impressão, use o módulo de registro embutido do Python. Você também pode executar a sessão de depuração com o IE. IPDB para ver se o sinal é recebido e, se o usuário for criado, o OT você pode escrever um teste unitário simples ou o Doctest para verificar isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top