0

[Django 1.5.1]

我已经为我的小型网站设置了django-profiles一种django-registration涉及“自定义”注册后端的方式,这样在注册期间,新用户可以一次性填写他们的用户名、密码和个人资料字段。但我现在正试图让用户使用 Facebook 登录并尝试使用django-facebook. 据我了解,通过django-facebookFacebook 登录将验证某人的身份,但这不会创建用户对象或个人资料对象。

所以我想到的想法是添加一个额外的个人资料字段,如果他们想使用 Facebook,它会保存用户的潜在 Facebook ID(我认为这是唯一的)。如果用户有个人资料,然后强制检查每个模板,如果没有,将他们引导到“创建个人资料”页面。然后,每当用户通过 Facebook 登录名登录时,它会以某种方式将他们的会话与匹配 Facebook ID 的相应配置文件对象(以及因此与配置文件对象对应的用户对象)相关联。我想我必须应用一个过滤器,然后创建一个“信号”,但我不太确定该怎么做。

不过,这听起来很令人费解。我怎样才能以正确的方式完成这项工作?

4

1 回答 1

0

以下是我建议你做事的方式。取消 django-facebook 并查看django-allauth。它将处理帐户(注册、逻辑、连接社交帐户)。

此外,django-profiles 对我来说 1.5+ 有很多问题,我不打扰它,而是创建我自己的配置文件应用程序和 UserProfile 模型,其中包含 django-allauth 无法处理的任何附加字段。

我的一个实现中的一个例子

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    default_address = models.OneToOneField(Address, blank=True, null=True)
    default_tshirt_size = models.CharField(blank=True, null=True, choices=constants.tshirt_sizes, max_length=50)
    default_shoe_size = models.CharField(blank=True, null=True, choices=constants.shoe_sizes, max_length=50)

您的用户配置文件模型应该指向同一个用户模型 allauth 正在使用。

from allauth.utils import get_user_model
User = get_user_model()

这是我用来自动创建用户配置文件的一种巧妙方法(如果尚未创建)。

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

然后只需使用将用户作为参数的 save() 方法创建一个注册表单类。在设置文件中链接到此类。

ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm'

请参阅这篇文章以获取一些相关的示例,当然除了您的实现之外,您可能希望此时基于 user.id 获取 UserProfile,并将附加值保存到配置文件实例。

使用 django-allauth 时如何自定义用户配置文件

于 2013-07-15T00:21:35.007 回答