【问题标题】:Django - Integrating django-profiles (and django-registration) with django-facebookDjango - 将 django-profiles(和 django-registration)与 django-facebook 集成
【发布时间】:2013-07-12 05:46:38
【问题描述】:

[Django 1.5.1]

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

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

这听起来很复杂。我怎样才能以正确的方式完成这项工作?

【问题讨论】:

    标签: python django django-registration django-facebook django-profiles


    【解决方案1】:

    这是我建议你做事的方式。取消 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,并将附加值保存到配置文件实例。

    How to customize user profile when using django-allauth

    【讨论】:

    • 非常感谢您的回复!我想我可以改用 django-allauth,但是我的网站已经有一些现有用户,并且我已经设置了我的自定义 userprofiles 类以及 django-profiles 和 django-registration...还有一些非我将 Facebook 与 django-allauth 集成的混乱方式?再次感谢!
    猜你喜欢
    • 2013-05-21
    • 2011-12-15
    • 2011-02-01
    • 2011-06-04
    • 2013-10-20
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多