【问题标题】:Get updated session data in a Django Channels' consumer在 Django Channels\' 消费者中获取更新的会话数据
【发布时间】:2022-08-21 01:10:00
【问题描述】:
Django Channels 文档说明了有关会话持久性的以下内容:
但是,如果您是 WebSocket 使用者,会话会被填充但永远不会自动保存 - 您必须调用 scope[\"session\"].save()
但是,我注意到它不能以相反的方式工作,例如如果会话数据被视图修改,这些更改不会影响从消费者内部可访问的会话状态版本(即使应用了request.session.modified = True)
标签:
django
websocket
session-variables
django-channels
【解决方案1】:
在寻找解决方案时,我发现了一些讨论相同问题的未回答问题。而且文档中似乎没有涵盖它(也许在某处提到过,但我没有设法找到它),所以我决定发布我的解决方案。如果由于某种原因不正确,请发表评论。
例如,您想在 AsyncWebsocketConsumer 子类的 receive 方法中获取更新的会话数据。
class MyConsumer(AsyncWebsocketConsumer):
async def receive(self, data):
current_session_data = await sync_to_async ( self.scope["session"].load) ()
load 返回一个包含所有会话变量的字典。
self.scope["session"] 不是字典,但它有 update 方法来更新底层字典:
self.scope['session'].update( current_session_data )
await sync_to_async ( self.scope["session"].save ) ()
希望这可以帮助某人