отладка проблем сигналов django - PullRequest
2 голосов
/ 16 мая 2011

У меня проблемы с подключением к сигналу в django.Я следовал руководству, доступному по http://dmitko.ru/?p=546, и пытался продлить регистрацию пользователя.

У меня правильно настроена django-регистрация.Работает нормально.Для отладки я поместил следующий код в мой urls.py:

from registration.signals import user_registered

def log_user_created(sender, user, request, ** kwargs):
  logger.debug("got USER_REGISTERED signal")

if settings.DEBUG:
  logger.debug("registering debug signal listeners")
  user_registered.connect(log_user_created)
else:
  logger.debug("debuging signals not enabled")    

Однако функция log_user_created никогда не вызывается.

Мой вопрос: какМогу ли я отладить свое приложение, чтобы увидеть, где глотается сигнал user_registered?

Примечание: я проверил, что моя версия django-registration работает правильно.Я переключил свою версию с той из примера приложения упомянутого блога.Это не изменило наблюдаемое поведение.

Ответы [ 3 ]

6 голосов
/ 19 января 2013

Убедитесь, что код, который соединяется с сигналом, и код, который отправляет сигналы, импортируют по одному и тому же пути. Например, если вы подключаете сигнал с:

from myapp.registration.signals import user_registered
user_registered.connect(...)

Затем, когда вы отправите этот сигнал, вы должны импортировать его с

from myapp.registration.signals import user_registered

(обратите внимание на myapp. ) и , а не :

from registration.signals import user_registered

в противном случае они будут рассматриваться как два разных сигнала.

0 голосов
/ 16 мая 2011

Я создал пример приложения, с которым можно играть (я думаю, это работает) http://dmitko.ru/samples/sample_user_registration.zip

0 голосов
/ 16 мая 2011

Вы пытались поместить user_registered.connect(user_created) в regbackend.py (а не в urls.py), как показано в приведенном вами примере?

Вы можете найти дополнительную информацию о том, где лучше всего подключить ваши сигналы, в этом вопросе .

Чтобы увидеть, правильно ли вызван user_registered, вы просто можете добавить отладкувызов в начале user_created функции.

django-debug-toolbar , хотя я не использовал эту особую функцию, может быть другой вариант:

В настоящее время написаны и работают следующие панели:

  • Список сигналов, их аргументов и приемников
...