【问题标题】:Django 1.8: Function not called on SignalDjango 1.8:信号上未调用函数
【发布时间】:2015-07-01 04:55:01
【问题描述】:

我正在使用一个代码,该代码应该在每次用户登录时发送一个信号。但这并没有发生。用户登录时不会调用函数 get_create_stripe()。 任何人都可以告诉什么是错的? 我在 Django 1.8 中工作,整个代码是 here

代码要点:此代码是电子商务网站的一部分,用户将其作为支付网关。 Intent 是,每次用户登录时,我们都会创建一个新的条带 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)

【问题讨论】:

    标签: python django stripe-payments django-signals


    【解决方案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)
    

    【讨论】:

    • 我做了后者,但它仍然无法正常工作。我还能尝试什么?
    • 您的用户是如何登录的?
    • 我正在通过管理员中的超级用户登录和注销。我只有一个用户,即管理员。
    • 您是否将您的signals.py 文件导入到它所在模块的__init__.py 中?因为没有加载的代码不会执行。
    • @user248884 如果您的问题已解决,请选择答案作为选择的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2011-06-09
    • 2017-02-06
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多