Django 1.8:未在 Signal 上调用函数
Django 1.8: Function not called on Signal
我正在寻找一个代码,该代码应在用户每次登录时发送一个信号。不过这并没有发生。当用户登录时,函数 get_create_stripe() 不会被调用。
谁能告诉我出了什么问题?
我在 Django 1.8 中工作,整个代码是 here.
关于代码的要点:此代码是电子商务网站的一部分,用户将其作为支付网关。意图是,每次用户登录时,我们都会创建一个新的条带 ID 或 return 现有的条带 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_logged_in(get_create_stripe)
信号不是这样工作的。你要么按照我上面写的去做,要么这样做:
user_logged_in.connect(get_create_stripe)
我正在寻找一个代码,该代码应在用户每次登录时发送一个信号。不过这并没有发生。当用户登录时,函数 get_create_stripe() 不会被调用。 谁能告诉我出了什么问题? 我在 Django 1.8 中工作,整个代码是 here.
关于代码的要点:此代码是电子商务网站的一部分,用户将其作为支付网关。意图是,每次用户登录时,我们都会创建一个新的条带 ID 或 return 现有的条带 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_logged_in(get_create_stripe)
信号不是这样工作的。你要么按照我上面写的去做,要么这样做:
user_logged_in.connect(get_create_stripe)