Django如何判断信号是否在请求中被调用

时间:2018-10-25 11:13:37

标签: python django celery signals

我正在使用Django 1.10。

是否有办法告诉信号触发该信号的save()是在视图Request内还是由“手动” save()调用的?

我有一个信号可以执行某些操作。我想执行不同的操作,具体取决于我是否处于请求中间(在Celery任务中更新对象)。

2 个答案:

答案 0 :(得分:0)

简短的回答:您不能。至少不是开箱即用。

更长的答案:您可以使用一些本地线程的技巧-cf this project for example-解决此问题,但请仔细阅读警告。

或者您可以使用除orm的pre / post保存信号之外的其他方法来触发您的操作-例如,在有意义的地方使用sending your own signals。就我而言,我首先要设法解决问题。

答案 1 :(得分:-2)

看看Django文档, 但是据我所知,您应该在/urproj/urapp/models.py中定义模型,这通常是一个类声明。并在/urproj/url.py内部使用route方法,也可以在您的应用程序内部。我有这种方法来检测Get请求是否正常,例如?!

class Expense(models.Model):
    text = models.CharField(max_length=255)
    date = models.DateTimeField()
    amount = models.BigIntegerField()
    user = models.ForeignKey(User)

def __unicode__(self):
    return "{}-{}-{}".format(self.date, self.user, self.amount)

那我使用这样的路由方法吗?

from . import views
urlpatterns = [
              url(r'^submit/expense/?$', views.submit_expense, name='submit_expense'),
              ]

我希望我已经回答了你的问题!