#django-oscar
#django-oscar
Вопрос:
Я пытаюсь настроить приемник сигналов в приложении «песочница». Я создал /sandbox/signals/receivers.py
следующий код:
import logging
from django.dispatch import receiver
from oscar.apps.catalogue.signals import product_viewed
@receiver(product_viewed)
def receive_product_view(sender, product, user, **kwargs):
logging.info("receive_product_view")
if user and user.is_authenticated:
logging.info("Product {product} viewed by user {user}")
else:
logging.info("Product {product} viewed anonymously")
Похоже, это ничего не дает. В /sandbox/__init__.py
I do import signals
и I have /sandbox/signals/__init__.py
, который делает import receivers
это, я предполагаю, что он загружает этот модуль при запуске (это может быть неправильным предположением).
Когда я загружаю страницу продукта в браузере, я ничего не вижу в журнале консоли. Могу ли я просто неправильно настроить ведение журнала или это неправильный способ подключения приемников сигналов?
Ответ №1:
Документы Django рекомендуют импортировать ваши приемники сигналов изнутри ready()
метода вашего класса конфигурации приложения. Вот пример того, как это делает сам Oscar.
Я подозреваю, что импорт приемника, в котором вы сейчас это делаете, вообще не будет работать — sandbox
он не загружается как самостоятельный модуль, это просто каталог, в котором находятся другие модули.
В песочнице, поставляемой с Oscar, нет ни одного собственного приложения, к которому вы могли бы добавить это, поэтому вам нужно будет добавить его в apps
каталог, а затем включить его в INSTALLED_APPS
настройку.