[用例] 我们的django应用程序使用AJAX,允许多个编写者和编辑者查看和编辑单篇文章。
我们的Django应用程序具有以下会话管理要求。
目前我一直在调查会话模型,但是我没有看到任何解决方案将页面限制为只有1个用户。
谢谢!
答案 0 :(得分: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版本。