2009-12-15 2 views
7

В моем приложении у меня есть AUTH_PROFILE_MODULE, установленный на users.UserProfile. Этот UserProfile имеет функцию create, которую следует вызывать, когда регистрируется новый пользователь, а затем создает запись UserProfile.django-регистрация и создание профиля пользователя

Согласно документации на регистрацию django все, что нужно сделать, это установить запись profile_callback на моем urls.py. Шахта выглядит следующим образом:

url(r'^register/$', register, {'form_class': RecaptchaRegistrationForm, 
'profile_callback': UserProfile.objects.create, 
'backend': 'registration.backends.default.DefaultBackend',}, 
name='registration_register') 

, но я получаю эту ошибку:

Exception Value: register() got an unexpected keyword argument 'profile_callback'

Так где же я должен поставить это, чтобы заставить его работать?

ответ

11

В какой версии django-registration вы используете? И какую версию django-registration вы имеете в виду? Я не знал об этом профиле.

Другой способ добиться того, что вы ищете, - использовать сигналы Django (http://docs.djangoproject.com/en/dev/topics/signals/). Приложение django-registration предоставляет некоторые.

Чтобы достичь этого, создайте signal.py в своем проекте (или приложении) и подключитесь к таким сигналам, как упомянутая документация. Затем импортируйте модуль сигналов в файл init .py или urls.py, чтобы убедиться, что он будет считан при запуске вашего проекта.

Следующий пример выполняется с использованием сигналов post_save, но вы можете использовать предоставленные django-register.

from django.db.models.signals import post_save 
from userprofile.models import UserProfile 
from django.contrib.auth.models import User 

def createUserProfile(sender, instance, **kwargs): 
    """Create a UserProfile object each time a User is created ; and link it. 
    """ 
    UserProfile.objects.get_or_create(user=instance) 

post_save.connect(createUserProfile, sender=User) 
+2

выглядит так, как будто я использовал новую версию регистрации django и прочитал старую документацию. Я только что нашел это в сообщениях фиксации: «Пользовательские сигналы теперь отправляются при регистрации пользователя и активации пользователя. Механизм profile_callback, который ранее выполнял аналогичную цель, был удален, поэтому это несовместимо с обратной связью». Итак, ваше решение - путь. – Kai

0

Джанго регистрации обеспечивает два сигнала, которые являются:

  • user_registered: Отправляется, когда регистрация завершена
  • user_activated: Отправляется, когда пользователь активировал свою учетную запись, используя ссылку активации

Для вашего случая вам необходимо зарегистрировать user_registered

from registration.signals import user_registered 
def createUserProfile(sender, instance, **kwargs): 
    user_profile = UserProfile.objects.create(user=instance) 

user_registered.connect(createUserProfile) 

Вам не нужно создавать отдельные файлы signal.py. Вы можете сохранить этот код в файле models.py любого из ваших приложений. Однако, так как код создания профиля, вы должны оставить его в профилях/models.py

Смежные вопросы