【发布时间】:2017-06-15 23:33:33
【问题描述】:
我已经根据this 延长了 Django 中的会话。总之,我添加了一个名为account_id 的字段来保存会话所属用户的用户ID。
一切正常,除了我添加的自定义字段account_id 没有在登录时设置。这样做:
from django.contrib import auth
from MyApp.models import CustomSession
def login(request):
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
try:
auth.login(request, user)
session_key = request.session.session_key
# CODE HERE
if session_key is not None:
return HttpResponse(json.dumps({'status': 'Success'}))
else:
return HttpResponse(json.dumps({'status': 'Fail'}))
我已尝试将以下内容发送到CODE HERE。但是,它们都不起作用:
request.session.model.account_id = user.idsession = CustomSession.objects.get(pk=session_key) session.account_id = user.id session.modified = Truerequest.session.account_id = user.idrequest.session[account_id] = user.id
在每次尝试中,account_id 在数据库中都是NULL。
我在这里错过了什么?
【问题讨论】:
-
您想这样做的原因是什么?在大约 99.9% 的情况下,不需要以这种方式将会话与用户联系起来。
-
@trixn 我正在尝试轻松获取在线用户列表。
-
这将如何帮助您做到这一点?
-
@DanielRoseman 我在用户断开连接时注销用户(用户使用 WebSockets 连接,所以我可以判断他们是否连接)。因此,在任何给定时间,会话表都会告诉我在线用户列表。
-
我不知道在扩展 Django 的 Session 类之后我必须将代码放在哪里。文档包含代码,但不包含要放置的位置。任何人都可以指导向数据库添加其他字段吗?