0

[用例] 我们的 django 应用程序利用 AJAX 并允许多个作者和编辑器查看和编辑一篇文章。

我们的 Django 应用程序具有以下会话管理要求。

  1. 任何时候只允许 1 个经过身份验证的用户出现在页面上。
  2. 当用户关闭窗口或退出页面时,会话过期。
  3. 会话在一段时间不活动后过期
  4. 如果用户在应用程序上处于活动状态,则会话不得超时。

目前我一直在研究会话模型,但是我还没有看到任何将页面限制为只有 1 个用户的解决方案。

谢谢!

4

1 回答 1

2

阻塞装饰器:

def view_only_by_one(key_function=lambda request: sha256(request.path).hexdigest()):
    def __dec(the_view):
        def __inner(request, *args, **kwargs):                
            key_for_view = key_function(request)
            current_blocked = request.session.get('blocked_view'):
            if current_blocked and current_blocked != key_for_view:
                 cache.set(key, None, timeout=0)
            user_id = cache.get(key_for_view)
            if user_id and user_id != request.user.id:
               raise PermissionDenied()
            cache.set(key, request.user.id, timeout=settings.ONLY_BY_ONE_BLOCK_TIME)
            request.session['blocked_view'] = key_for_view
            return the_view(request, *args, **kwargs)
       return __inner
    return __dec

此外,您可以拥有一个由 ajax 调用的解锁视图,并在页面退出时删除锁定(从会话中读取)。会话+缓存是最简单的解决方案,但是很容易将其更改为db版本。

于 2013-06-24T13:06:59.387 回答