基于Django Channels的GraphQL订阅实现实时推送
在Django中集成GraphQL订阅,通过WebSocket将数据库变更推送给客户端。 · 难度:入门 · +10XP
GraphQL Subscription实战
本教程超越REST,实现GraphQL的Subscription特性,结合Django Channels处理WebSocket。当某个模型通过Django ORM保存时,信号触发Channel Layer发送事件,GraphQL订阅解析器将事件转发给对应客户端。你将学会配置ASGI、编写Subscription类型、在resolver中订阅特定频道,以及如何在信号中发布消息。最终实现一个实时通知系统。
import channels.layers
from asgiref.sync import async_to_sync
from django.db.models.signals import post_save
@receiver(post_save, sender=Notification)
def broadcast_notification(sender, instance, **kwargs):
channel_layer = channels.layers.get_channel_layer()
async_to_sync(channel_layer.group_send)(
f'user_{instance.user.id}',
{
'type': 'notification.message',
'data': {'id': instance.id, 'content': instance.content}
}
)