Я пытаюсь отправить уведомление пользователю, используя веб-сокеты, о конкретном событии. У меня есть следующая модель приемника, которая запускает метод websocket:
@receiver(pre_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, update_fields=None, **kwargs):
if update_fields:
if 'pan_number_verified' in update_fields and instance.pan_number_verified is True:
notification = Notification.objects.create(message='Your PAN Number has been verified...Head on to '
'creating a campaign right away.', user=instance)
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)("notification_%s" % instance.id, {
"type": "app_consumer.notification_message",
"message": str(notification.id)
})
Вот мой потребитель приложения:
class AppConsumer(WebsocketConsumer):
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['user_id']
self.room_group_name = 'notification_%s' % self.room_name
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, close_code):
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'app_consumer.notification_message',
'message': message
}
)
def notification_message(self, event):
message = event['message']
self.send(text_data=json.dumps({
'message': message
}))
Но я получаю следующее сообщение об ошибке:
Исключение внутри приложения: нет обработчика для типа сообщения app_consumer.notification_message
Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/ channel / consumer.py ", строка 59, в вызов [получение, self.channel_receive], self.dispatch
файл" /Library/Frameworks/Python.framework/Versions/ 3.7 / lib / python3 .7 / site-packages / channel / utils.py ", строка 51, в await_many_dispatch ожидайте отправки (результат)
Файл" /Library/Frameworks/Python.framework/ Версии / 3.7 / lib / python3 .7 / site-packages / asgiref / syn c .py ", строка 244, в вызов return await asyncio.wait_for (future, timeout = None)
Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/tasks.py", строка 414, в wait_for для возврата, ожидают fut
F ile "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/concurrent/futures/thread.py", строка 57, в результате выполнения = self.fn (* self.args, ** self.kwargs)
Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/channels/db.py", строка 14 , в thread_handler вернуть super (). thread_handler (l oop, * args, ** kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3 .7 / site-packages / asgiref / syn c .py ", строка 277, в thread_handler возвращает удовольствие c (* args, ** kwargs)
File" / Library / Frameworks / Python .framework / Versions / 3.7 / lib / python3 .7 / site-packages / channel / consumer.py ", строка 107, в диспетчерском повышении ValueError (" Нет обработчика для типа сообщения% s "% message [" type " ])
Нет обработчика для типа сообщения app_consumer.notification_message