Django Signal用户注册facebook时

时间:2016-05-13 16:33:51

标签: python django facebook django-signals

我正在询问如何在模型用户中添加信号并知道该用户是否通过 Facebook 进行了注册,我的意思是,如果是新的用户< / strong>在Django中使用 Facebook 创建我想要捕获此事件并保存新的Customer模型。 我相信这可能是那样的:

# SIGNALS AND LISTENERS
from django.contrib.auth.models import User
from django.db.models import signals
from django.dispatch import dispatcher
form customers.model import Customer

# User
def user_post_save(sender, instance, signal, *args, **kwargs):
    # Creates user profile
    if user # <- SOMETHGING LIKE IF USER IS LOGGED IN WITH FACEBOOK...
        customer = Customer.objects.get_or_create(owner=instance)

dispatcher.connect(user_post_save, signal=signals.post_save, sender=User)

在评论中,您可以看到我需要的东西。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

Django提供内置信号:pre_savepre_init ...

使用它:

def password_change_signal(sender, instance, **kwargs):
    try:
        user = User.objects.get(username=instance.username)
        if not hasattr(user, 'userprofile'):
            print 'has no profile'
            return
        if not user.password == instance.password:
            print 'setting vals'
            profile = user.get_profile()
            profile.force_password_change = False
            profile.save()
    except User.DoesNotExist:
        pass

signals.pre_save.connect(password_change_signal, sender=User,dispatch_uid='members.models.UserProfile') 

答案 1 :(得分:0)

根据此SO POST,您可以使用post_save.connect()在创建用户时保存客户对象。请注意,我已根据您的要求在上述帖子中粘贴和编辑了代码。

from django.db.models.signals import post_save
from .models import Customer
from django.contrib.auth.models import User

def create_customer(sender, **kwargs):
    user = kwargs["instance"]
    if kwargs["created"]:
        customer = user.models.Customer()
        customer.setUser(sender)
        customer.save()

post_save.connect(create_customer, sender=User)