【问题标题】: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 ) ()
    

    希望这可以帮助某人

    【讨论】:

      猜你喜欢
      • 2020-08-15
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2020-05-13
      相关资源
      最近更新 更多