我正在接受一个代码,该代码应该在每次用户登录时发送信号。但这不会发生。用户登录时不会调用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)
答案 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)