python - 在 Django 中 Signal.send 后接收器函数没有响应
问题描述
我正在尝试创建一个简单的 twitter 机器人,它从不同的 API 接收信息并根据信息发布推文。我为此使用了 Django(不确定是否完全需要,但我只是想学习框架)所以我创建了 2 个不同的应用程序,一个从 API 接收信息并创建一个对象(到目前为止这个对象只是一个报价)并将其发送到另一个处理 twitter 发布的应用程序。一般的想法是,我的报价应用程序将生成一个信号,该信号将发送到发布应用程序,在该应用程序中我使用接收器装饰器创建了一个函数,因此它将一直在监听。尽管如此,由于某种原因,装饰器无法正常工作,并且在发送信号后我没有得到任何响应。
这是信号的创建:
from django.dispatch import Signal
new_quote = Signal(providing_args=['author', 'content'])
这是信号的发送:
quote=Quote.objects.create(author=author, content=content)
new_quote.send_robust(sender=quote, author=author, content=content)
对象的创建没有问题,已经检查过了。这就是信号的捕捉。
from .models import Post
from django.dispatch import receiver
from quotes.signals import new_quote
from quotes.models import Quote
@receiver(new_quote, sender=Quote)
def post_tweet(Quote, **kwargs):
print('here')
auth = kwargs['author']
content = kwargs['content']
Post.objects.create(title=auth, content=content)
打印只是用于检查函数是否实际运行。发布创建也可以正常工作,也已经检查过了。
我只是在学习 Django 并且已经阅读了文档并按照“教程”的步骤进行操作,但一定有一些我没有看到的东西。
编辑:
帖子创建者的应用文件
from django.apps import AppConfig
class PostsConfig(AppConfig):
name = 'posts'
def ready(self):
import posts.signals
引用的应用程序文件: from django.apps import AppConfig
class QuotesConfig(AppConfig):
name = 'quotes'
def ready(self):
pass
解决方案
发送者是类quote
的一个实例,Quote
接收者是为sender=Quote
发送者是Quote
类的地方定义的。所以,发件人不匹配。根据有关发送信号的文档,您希望将发件人定义为Quote
而不是quote
当您调用时send_robust
。
推荐阅读
- compression - 使用 LZMA 编码信息流
- python - 如何通过 python 为 Firefox 创建新的配置文件?
- modelica - 不同的 Modelica 仿真环境有什么区别?
- reactjs - 反应:帮助理解特定的柯里化用例
- angular - 无法通过 Matomo/Piwik 跟踪 Angular 8 中的路线变化
- python - 基于 Python 3 中的列合并/加入 2 个字典
- jenkins - 是否可以有多个 jenkinsfile 和 jenkinsfile 的自定义名称
- php - PHP - 更改与查询结果相关的颜色图标类
- python - 如果 json 请求为“无”,则继续“for”
- java - 分数程序 - Java