返回 Django 石墨烯订阅中订阅事件的初始数据

Posted

技术标签:

【中文标题】返回 Django 石墨烯订阅中订阅事件的初始数据【英文标题】:Return initial data on subscribe event in django graphene subscriptions 【发布时间】:2020-02-15 23:49:06 【问题描述】:

我正在尝试在订阅时回复用户。例如,在聊天室中,当用户连接到订阅时,订阅会向他响应数据(如欢迎消息),但仅针对刚刚连接的同一用户(无广播)。

我该怎么做? :(

更新:我们决定使用频道。 DjangoChannelsGraphqlWs 不允许直接返回消息。

【问题讨论】:

【参考方案1】:

看看this DjangoChannelsGraphQL example。链接指向避免“用户自我通知”的部分(避免用户被告知他自己的行为)。您可以使用相同的技巧仅向执行操作的用户发送通知,例如谁刚刚订阅。

修改后的publish 处理程序可能如下所示:

def publish(self, info, chatroom=None):
    new_msg_chatroom = self["chatroom"]
    new_msg_text = self["text"]
    new_msg_sender = self["sender"]
    new_msg_is_greetings = self["is_greetings"]

    # Send greetings message only to the user who caused it.
    if new_msg_is_greetings:
        if (
            not info.context.user.is_authenticated
            or new_msg_sender != info.context.user.username
        ):
            return OnNewChatMessage.SKIP

    return OnNewChatMessage(
        chatroom=chatroom, text=new_msg_text, sender=new_msg_sender
    )

我没有测试上面的代码,所以可能会有问题,但我认为它很好地说明了这个想法。

【讨论】:

以上是关于返回 Django 石墨烯订阅中订阅事件的初始数据的主要内容,如果未能解决你的问题,请参考以下文章

石墨烯 django 继电器:继电器变换错误

石墨烯代码在 Django 数据迁移之前运行

石墨烯突变返回 400 - 不会正确传递 id 字段

用石墨烯 django 数点赞

Django 石墨烯中继限制对用户拥有的对象的查询

使用 ajax 轮询缓解繁重的 django 石墨烯请求