需要帮助访问 Django 频道中的会话变量 consumers.py

Need help accessing session variables in Django Channels consumers.py

我正在生成一个随机用户 ID 并将其存储为我视图中的会话变量。我正在尝试访问 consumers.py 中的会话变量以识别用户(未经过身份验证)并向用户更新数据库中的更改。

view.py :

def index(request):
        request.session['uniqueid'] = 'random_number'
        print(request.session['uniqueid']) # this is working 
    return render(
        request,
        'home.html',
    )

consumers.py:

class WSConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()
        U = self.scope['session']["uniqueid"]

错误:

Exception has occurred: KeyError (note: full exception trace is shown but execution is paused at: connect) 'uniqueid'

我按照 中的说明将 localhost 更改为 127.0.0.1 ('ws://127.0.0.1:8000/ws/socket/'),但收到相同的错误。

我无法确定错误,如有任何帮助,我们将不胜感激。

您应该将会话标记为 “已修改” 以确保它被保存。

确实SessionMiddleware检查request.session是否被修改,或者配置是否保存 每次会话,保存更改并设置会话 cookie 或删除 如果会话已清空,则会话 cookie。

def index(request):
        session = request.session 
        session['uniqueid'] = 'random_number'
        session.modified = True  
    return render(request, 'home.html')

另外 print 在您的视图函数中 return 缓存值 也不是持久值。