有人可以在缺少的django-allauth教程中解释这行代码吗?

时间:2014-09-15 16:39:03

标签: django django-models django-allauth

我在这里做了django-allauth教程:http://www.sarahhagstrom.com/2013/09/the-missing-django-allauth-tutorial/

我很难理解这条线的含义。我认为目的是在创建用户时创建UserProfile,但我不了解它是如何实现的。

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

2 个答案:

答案 0 :(得分:2)

此行猴子修补User类以添加配置文件实例属性。

如果我们可以更改User,我们会在User类中添加以下内容(它虽然相同而不是{{1}你使用u作为参数):

@property
def profile(self):
  UserProfile.objects.get_or_create(user=self)[0]

答案 1 :(得分:1)

自Django> 1.5您可以Custom User Model而不是为用户编写配置文件模型,也可以使用自定义用户模型检查与allauth相关的instructions。如果您坚持使用配置文件模型,那么在用户注册时有更好的方法来创建用户配置文件。例如,如果您有ACCOUNT_EMAIL_VERIFICATION="mandatory",那么您应该在用户通过编写allauth.account.signals.email_confirmed信号处理程序成功验证他/她的电子邮件时创建用户配置文件。否则,如果不需要电子邮件验证,那么您有两个选项,可以通过编写allauth.account.signals.user_signed_up信号的处理程序来创建用户配置文件,也可以使用自定义注册表单的signup方法创建用户配置文件:

class SignupFormExtra(forms.Form):

    def __init__(self, *args, **kw):
        super(SignupFormExtra, self).__init__(*args, **kw)

    def signup(self, request, user):
        UserProfile.objects.get_or_create(user=user)
        return user

告诉allauth使用此注册表单作为基类:

ACCOUNT_SIGNUP_FORM_CLASS = 'myproject.myappp.forms.SignupFormExtra'

告诉django使用特定于站点的配置文件模型(django< 1.5):

AUTH_PROFILE_MODULE = "myapp.UserProfile"

P.S博客文章非常陈旧,从那以后allauth发生了很大的变化。您也应该关注官方documentation包。