2015-09-14 3 views
0

Я работаю на простой репутации приложения Django, основанный на Actstream justquick/Джанго-активность потока /, который создает сигнал, который будет использоваться в качестве: rep.send(request.user, action='increase', target=obj, val=10)Джанго сигналы отправки дважды

Однако, даже при отправке UID :

# apps.py 
from django.apps import AppConfig 
from . signals import rep 
from . receivers import rep_handler 

class DjangoReputationConfig(AppConfig): 
    name = 'django_rep' 

    def ready(self): 
     rep.connect(rep_handler, dispatch_uid='django_rep.models')` 

Что я скопировал из Actstream/apps.py, я не могу получить мои сигналы посылать только один раз. Я пробовал другие уникальные строки, и, похоже, ничего не изменилось.

В моем __ init__.py есть: default_app_config = 'django_rep.apps.DjangoReputationConfig'

Спасибо! Репо - here, если вы хотите увидеть код!

ответ

0

У меня была точно такая же проблема. Я пробовал много вещей, но в конце концов мне пришлось прибегнуть к помощи переменной окружения, например:

import os 
from django.apps import AppConfig 

class MyConfig(AppConfig): 
    name = "xyz" 

    def ready(self): 
     if not os.environ.get("ready_called"): 
      # The development server instantiates MyConfig twice; running via gunicorn only once. 
      os.environ["ready_called"] = "1" # Use this environment semaphore to prevent starting backgroundtaks more than once. 
      import backgroundtasks 
      backgroundtasks.install() 
+0

Спасибо - Оказывается, это потому, что я имел @receiver декоратора на функцию приемника, а также подключаться к нему в AppConfig - это была ваша проблема? – ab11

+0

Нет, единственное, что я делаю в своем AppConfig, - это запустить фоновый поток для некоторых задач периодической базы данных. Я _do_ использую @receiver здесь и там в качестве декоратора (я использую allauth), но я не подключаюсь к нему явно. –

Смежные вопросы