我在我的视图中设置了session["logID"]
注册和登录功能,但是当我想在用户注销时将其保存在数据库中时,我在django中获得Loginstatus matching query does not exist.
。这是views.py
中的函数:
def loginProcess(request, email, password):
try:
user = authenticate(username=User.objects.get(email=email).username, password=password)
except ObjectDoesNotExist:
user = None
if user is not None:
# some code here for create LoginStatus model Object
request.session["logID"] = newLoginStatus.id
return showProfile(request)
else:
return homepage(request)
def logoutProcess(request):
# ...
userLoginStatus = Loginstatus.objects.get(pk=request.session.get("logID")) # I got Error here
userLoginStatus.sessionData = userSessionData
userLoginStatus.save()
logout(request)
return redirect('/')
我在服务器中获得了Loginstatus matching query does not exist.
,因此session["logID"]
不存在!但我在loginProcess
设置了它,userLoginStatus
成功保存在DB中!我不明白会发生什么。
答案 0 :(得分:0)
我通过在django shell中调试来解决我的问题。 django两次加载注销网址。第一次用户成功注销/logout
和/logout/
,但第二次request.session
将为空,然后行userLoginStatus = Loginstatus.objects.get(pk=request.session.get("logID"))
抛出ObjectDoesNotExist
例外,然后我使用try
和except
块更改代码:
def saveUserLoginStatusDetails(request):
userSessionData = Session.objects.get(session_key=request.session.session_key).session_data
userLoginStatus = Loginstatus.objects.get(logid=request.session.get("logID"))
userLoginStatus.sessionData = userSessionData
userLoginStatus.logout_date = datetime.now().date().isoformat()
userLoginStatus.save()
def logoutProcess(request):
try:
saveUserLoginStatusDetails(request)
except ObjectDoesNotExist:
pass
logout(request)
return redirect('/')
答案 1 :(得分:0)
我解决了我的问题,在注销时遇到了同样的错误。
解决方法(除了keyerror) #Django #python #key 错误
def logout(request):
try:
if request.method == 'GET':
del request.session['email']
return redirect('login')
except KeyError:
return redirect('login')