django-регистрация и создание профиля пользователя - PullRequest
7 голосов
/ 15 декабря 2009

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

В соответствии с регистрационной документацией 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')

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

Значение исключения: register () получила неожиданный аргумент ключевого слова 'profile_callback'

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

Ответы [ 2 ]

11 голосов
/ 15 декабря 2009

Какую версию django-регистрации вы используете? А на какую версию django-регистрации вы ссылаетесь? Я не знал об этом profile_callback.

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

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

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

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)
0 голосов
/ 28 марта 2013

Django-регистрация предоставляет два сигнала:

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

Для вашего случая вам нужно 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 любого вашего приложения. Тем не менее, поскольку его код создания профиля, вы должны держать его в profile / models.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...