我在这里做了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])
答案 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包。