Return django 石墨烯订阅中订阅事件的初始数据
Return initial data on subscribe event in django graphene subscriptions
我正在尝试回复订阅用户。例如,在聊天室中,当用户连接到订阅时,订阅会用数据(如欢迎消息)响应他,但仅限于刚刚连接的同一用户(无广播)。
我该怎么做? :(
更新:我们决定使用频道。 DjangoChannelsGraphqlWs 不允许直接回复消息。
看看this DjangoChannelsGraphQL example。 Link 指向要避免 "user self-notifications" 的部分(避免用户被告知他自己的操作)。您可以使用相同的技巧仅向执行操作的用户发送通知,例如谁刚刚订阅了。
修改后的 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
)
我没有测试上面的代码,所以可能会有问题,但我认为它很好地说明了这个想法。
我正在尝试回复订阅用户。例如,在聊天室中,当用户连接到订阅时,订阅会用数据(如欢迎消息)响应他,但仅限于刚刚连接的同一用户(无广播)。
我该怎么做? :(
更新:我们决定使用频道。 DjangoChannelsGraphqlWs 不允许直接回复消息。
看看this DjangoChannelsGraphQL example。 Link 指向要避免 "user self-notifications" 的部分(避免用户被告知他自己的操作)。您可以使用相同的技巧仅向执行操作的用户发送通知,例如谁刚刚订阅了。
修改后的 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
)
我没有测试上面的代码,所以可能会有问题,但我认为它很好地说明了这个想法。