Джанго сигналы не работает на работника
У меня есть приложение django (1.9), которое реализовано с помощью websocket. Для реализации websocket я использую канал Django (1.1.8). Мои модели находятся под управлением ACL, которым управляет Django-guardian (1.4.4).
Я отправляю сообщение через websocket каждый раз, когда модель с именем "My_model" создается, изменяется или удаляется. Но моя проблема заключается в том, что модель находится под ACL, что означает, что пользователь может получать сообщения через веб-сокет, если и только если этот пользователь может_ просматривать экземпляр модели. Это означает, что у меня должен быть экземпляр пользователя в моем обработчике сигналов, чтобы проверить, есть ли у пользователя websocket perm, перед отправкой сообщения.
Вы можете увидеть ниже мою реализацию. Он работает в среде разработки, но не в производстве. Разница в том, что на производстве обработчик websocket работает под рабочим Django и сервером Daphne.
в файле my_app/consumer /my_model_consumer.py:
class MyModelConsumer(WebsocketConsumer):
http_user_and_session = True
# the connect method is triggered when an user is connecting through the websocket
# It register signals handlers which receive the connected user as argument
def connect(self, message, **kwargs):
user = message.user
group = "my_model_Notifications-{}".format(user.id)
Group(group).add(message.reply_channel)
post_save.connect(partial(notify_my_model_change, user=user, group=group), My_model, weak=False, dispatch_uid= uuid.uuid4())
post_delete.connect(partial(notify_request_delete, user=user, group=group), My_model, weak=False, dispatch_uid= uuid.uuid4())
self.message.reply_channel.send({"accept": True})
def notify_my_model_change(sender, **kwargs):
user = kwargs['user']
instance = kwargs['instance']
if user.has_perm('view_my_model', instance):
Group(group).send({"text": "My_model changed"})
Кто-то знает, что не так, заставляя его не работать в производственной среде?