Django:为什么我必须在AppConfig中导入信号(它似乎无法工作)

时间:2019-03-24 07:26:57

标签: python django

我目前通过python manage.py dynamic_pricing_adjustment创建了一个每六个小时调用一次的定期cron作业。如预期的那样,我的控制台将打印DO STUFF

我的 AppConfig

from django.apps import AppConfig


class PricingConfig(AppConfig):
    name = 'myproject.pricing'

它在Django documentation中说,我应该将其添加到ready函数中。它似乎没有工作。您能告诉我那部分是什么意思还是为什么我应该添加它?

def ready(self):
    from . import signals  # noqa

这是我其余的代码:

dynamic_pricing_adjustment.py

from django.core.management.base import BaseCommand
from myproject.pricing.signals import dynamic_pricing


    class Command(BaseCommand):
        help = "Adjust prices for dynamic pricing"

        def handle(self, *args, **options):
            dynamic_pricing.send(self)

signals.py

from django.dispatch import Signal, receiver

dynamic_pricing = Signal()


@receiver(signal=dynamic_pricing)
def adjust_prices(sender, **kwargs):
    print("DO STUFF")

1 个答案:

答案 0 :(得分:0)

通常,信号用于模型调用的预定义信号(在保存,删除等之前/之后)或请求(请求开始/完成)。 Django需要知道您的接收器功能所在的位置并进行注册。这就是为什么您将它们导入AppConfig.ready()中的原因。否则它们将不会被运行。

在您的情况下,您定义了自定义信号并直接调用了。在此示例中,信号没有意义。