我发现了一个代码,它应该在每次用户登录时发送信号。但这并没有发生。当用户登录时,不会调用函数get_create_stripe()。有人能说出问题所在吗?我在Django 1.8中工作,整个代码都在这里。
给出代码:该代码是电子商务网站的一部分,用户将其作为支付网关。目的是,每次用户登录时,我们都会创建一个新的条纹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)
您需要将信号方法连接到信号。
类似的东西
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_loged_in(get_create_st熟)
信号不是这样工作的。要么你做我上面写的,要么这样做:
user_logged_in.connect(get_create_stripe)