Django 1.8:函数未调用Signal

时间:2015-07-01 04:55:02

标签: python django stripe-payments django-signals

我正在接受一个代码,该代码应该在每次用户登录时发送信号。但这不会发生。用户登录时不会调用get_create_stripe()函数。 任何人都能说出错了吗? 我在Django 1.8工作,整个代码是here

关于代码的要点:此代码是电子商务网站的一部分,用户将其作为其支付网关。意图是,每次用户登录时,我们都会创建一个新的条带ID或返回一个现有的条带ID。

是因为这个函数不在models.py中吗?这被写入文件'signals.py',我不太确定Django应该如何理解从该文件中的信号调用中调用get_create_stripe()。是这样吗?

import stripe
from django.conf import settings
from django.contrib.auth.signals import user_logged_in
from .models import UserStripe

stripe.api_key = settings.STRIPE_SECRET_KEY


def get_create_stripe(sender, user, *args, **kwargs):
    new_user_stripe, created = UserStripe.objects.get_or_create(user=user)
    print "hello"
    if created:
        customer = stripe.Customer.create(
            email = str(user.email)
        )
        print customer
        new_user_stripe.stripe_id = customer.id
        new_user_stripe.save()

user_logged_in(get_create_stripe)

1 个答案:

答案 0 :(得分:1)

您需要将信号方法连接到信号。

这样的东西
from django.dispatch import receiver
from django.contrib.auth.signals import user_logged_in

@receiver(user_logged_in, sender=UserStripe)
def get_create_stripe(sender, user, *args, **kwargs):

编辑:此外,这是什么:     user_logged_in(get_create_stripe)

这不是信号的工作方式。要么你做我上面写的,要么这样做:

user_logged_in.connect(get_create_stripe)