【问题标题】:Django session last_touchDjango 会话 last_touch
【发布时间】:2017-03-13 20:06:18
【问题描述】:

我的中间件代码如下:

class AutoLogout(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):

       # if not request.user.is_authenticated():
       if (request.COOKIES == None):
            # Can't log out if not logged in
            return

       if datetime.now() - request.session['last_touch'] > timedelta( 0, settings.AUTO_LOGOUT_DELAY * 60, 0):
            try:
                logout(request)
                del request.session['last_touch']
            except KeyError:
                pass
            else:
                request.session['last_touch'] = datetime.now()
       return self.get_response(request)                                                 The eroor i am getting is KeyError: 'last_touch'

【问题讨论】:

  • 它有什么问题?
  • 你好像没有问过问题。
  • KeyError: 'last_touch'..如何解决?

标签: django session


【解决方案1】:

您的 try/except 块的布局不正确,无法捕获和处理KeyError。它可能发生在三个地方,但你只抓到一个。逻辑有点笨拙,但只是编辑你所拥有的,我认为这就是你想要实现的:

try:
     if datetime.now() - request.session['last_touch'] > timedelta( 0, settings.AUTO_LOGOUT_DELAY * 60, 0):
          logout(request)
          del request.session['last_touch']
          return self.get_response(request) 
     else:
          request.session['last_touch'] = datetime.now()
          return self.get_response(request)  
except KeyError: #KeyError thrown if last touch doesn't exist, so set it. 
     request.session['last_touch'] = datetime.now()

【讨论】:

  • 感谢它不再显示错误...但它不会在 2 分钟后自动注销。
猜你喜欢
  • 2010-09-08
  • 2021-09-02
  • 2011-07-10
  • 2012-06-01
  • 2019-07-05
  • 2011-10-07
  • 2011-01-20
  • 2013-11-19
相关资源
最近更新 更多