相关疑难解决方法(0)

python类中的变量范围

声明类中的变量(在函数外部):所有类函数都可以访问它(基本上是一个公共变量)

在类中的函数内声明一个变量:只有该函数可以访问它(它在该函数范围内)

在类中的函数内声明一个带有self(变量名)的变量:所有类函数都可以访问它(这与全局(变量名)有什么不同?)

并且由于没有私有/受保护,所以一切都是公共的,因此可以从课堂外访问从课堂内部访问的所有内容.

我应该知道还有其他细微差别吗,还是我几乎得到了它?

python scope

48
推荐指数
2
解决办法
5万
查看次数

Django post_save信号是异步的吗?

我有一个'喜欢'的功能,就像社交网络或赞成功能; 用户点击星标/心脏/任何内容以标记所喜欢的内容.它是用ajax完成的,必须很快.这里唯一的问题是,由于某些原因,我必须为每个'喜欢'做一些任务,我发现它们是在'喜欢'视图中直接编码而且它使它变慢.我正在考虑使用信号来使这些任务的执行异步,因此视图可以立即将json发送回javascript,而无需等待任务完成.我开始为'喜欢'创建一个信号但后来发现Django的信号不是异步的,它最终会一样,视图必须等待信号完成才能发回它的响应.所以我可以尝试使该信号异步,因为它在这里和那里解释但我也会使用post_save信号为'like'模型,但现在我想知道视图是否可以在信号执行之前完成?

django signals

35
推荐指数
3
解决办法
1万
查看次数

阻止特定 save() 调用的信号发送

当收到信号时,我正在对模型的对象执行一些持久性操作post_save,其中包括对save(). 显然,该save()调用发送了一个post_save信号,我正在信号递归中着陆。

\n\n

post_save有没有办法阻止 Django在特定调用上发送信号save()?或者我可以在信号回调中检测到呼叫是否“循环”?

\n\n

那不起作用

\n\n

我尝试通过添加属性来修改模型的对象,但似乎django.db.models.base.Model.save_base将“净化”对象传递给信号回调,该回调不再包含该属性:

\n\n
def callback(sender, **kwargs):\n    instance = kwargs[\'instance\']\n    if not hasattr(instance, \'no_signal\'):\n        # (...) Perform actions\n        instance.no_signal = True\n        instance.save()\npost_save.connect(callback, dispatch_uid=\'post_save_callback\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

背景

\n\n

完整的情况比仅仅接收信号、修改对象并持久化要复杂一些。事实上,我有两个相同的 Django 实例(在不同的服务器上),它们交换创建或修改的对象(通过 \xc3\x98MQ)并将其保存在自己的数据库中。我不想使用任何类型的数据库同步,因为应用程序需要易于部署,甚至应该与 sqlite 一起使用。

\n\n

由于这应该适用于所有模型,无论它们是否是通过视图或管理应用程序修改/创建的,我更愿意找到一种使用信号的方法,post_save而不是引入自己的信号,这需要在不同的点触发在项目(包括User模型)中。

\n

python django django-signals django-models

6
推荐指数
1
解决办法
2355
查看次数

标签 统计

django ×2

python ×2

django-models ×1

django-signals ×1

scope ×1

signals ×1