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
我这样做import signals
并且我有/sandbox/signals/__init__.py
which 这样做import receivers
所以我假设它在启动时加载该模块(这可能是一个错误的假设)。
当我在浏览器中加载产品页面时,我在控制台日志中看不到任何内容。我可能只是记录设置错误,或者这是连接信号接收器的错误方式吗?
解决方案
Django 文档建议您从ready()
应用程序配置类的方法中导入信号接收器。这是奥斯卡本身如何做到这一点的一个例子。
我怀疑在你当前正在做的地方导入接收器根本不起作用——sandbox
它本身并没有作为模块加载,它只是一个包含其他模块的目录。
Oscar 附带的沙盒没有任何您可以添加的应用程序 - 因此您需要将其添加到apps
目录中,然后将其包含在INSTALLED_APPS
设置中。
推荐阅读
- javascript - 仅当该数组中的对象存在于另一个数组中时才返回对象数组
- docusignapi - Docusign API:在“这里”或“那里”签名,需要一个,而不是两个
- swiftui - SwiftUI 线规
- java - 为什么在子类中无法通过超类实例访问受保护的成员?
- go - 如何将 TestMain(m *testing.M) 限制为当前测试文件
- amazon-web-services - 当我将 zip 文件上传到 elasticbeanstalk 时,到底发生了什么?
- altair - Altair/Vega-Lite 热图:过滤前 k
- r - 跨单行格式化gt表的方法?
- reactjs - Gitlab-ci 无法复制文件
- python - 注册用户无法使用凭据登录 django rest 框架