2009-12-15 78 views
7

在我的应用程序中,我有AUTH_PROFILE_MODULE设置为users.UserProfile。此用户配置文件具有功能create,应在新用户注册时调用该功能,然后创建UserProfile条目。django注册和用户配置文件创建

根据django注册文档,所有需要做的就是在我的urls.py中设置profile_callback条目。我的是这样:

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注册?你指的是哪个版本的Django注册?我不知道这个profile_callback。

另一种实现你要找的东西是使用Django信号(http://docs.djangoproject.com/en/dev/topics/signals/)。 Django注册应用程序提供了一些。

实现该目的的一种方法是在项目(或应用程序)中创建signals.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) 
+2

看起来像我用了一个新的Django注册版本,并阅读旧的文档。我刚刚在提交消息中发现了这一点: “自定义信号现在在用户注册和用户激活时发送。之前用于类似目的的profile_callback机制已被删除,因此这是向后不兼容的。 所以你的解决方案是要走的路。 – Kai 2009-12-15 19:36:14

0

Django的登记提供的两个信号,它们是:

  • 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) 

您不需要创建任何单独的signals.py文件。您可以将此代码保存在任何应用程序的models.py中。但是,自从它的配置文件创建代码,你应该保留在配置文件/ models.py

相关问题