1

我有一个需要登录所有页面的私人网站。当用户去编辑记录时,我不想锁定记录。我想为其他人保留记录。我设计了一个系统,使用 dajax/dajaxice 对 django 进行 AJAX 调用,以获取最新的人员和编辑日期时间以供记录。如果当前用户没有进行最近的编辑,则会出现一个警告框,通知用户其他人在打开记录后进行了编辑,他们应该刷新页面以获取最新版本的数据。

这一切都很好,非常适合我们的情况。我有一个会话超时,超时时会将用户发送到登录提示。如果用户离开页面并离开计算机,我们希望保护敏感数据。这也很完美。

我的问题是,当调用 AJAX 来检查数据的版本时,看看它是否改变了,它也会保存会话,所以无论他们在页面无人看管的时间有多长,会话都不会超时。

有没有办法绕过 SESSION_SAVE_ON_EVERY_REQUEST,这样只有这个请求不会触发保存。我知道我可以在每个 OTHER 视图中手动保存会话,但这似乎是错误的做法。我想我可以编写中间件来检查请求的视图,如果不是这个视图,则只保存会话,但我也不确定这是否是最好的解决方案。

有什么建议么?

提前致谢。

4

1 回答 1

1

我很确定这会奏效。我将 CustomeMiddleWare 添加到 settings.py MIDDLEWARE_CLASSES。此外,在 settings.py 中关闭每个请求的会话保存。

class CustomMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        if view_func.__module__ != "exclude.module" and view_func.__name__ != "excludeMethod":
            request.session.save()

现在的问题是使用 Dajaxice,模块和名称作为 dajaxice_request 出现。现在我不知道如何获得请求的实际方法。尝试了很多东西,但都无法做到。不想破解 DajaxiceRequest 代码,但可能不得不这样做。

  • 解决方案:

    为这一方法切换到 jQuery ajax。创建了一个新的 urls.py 条目以进行单次调用以获取记录的版本。这使得 process_view 中的 view_func 可用,因此我只能将会话保存在除此之外的其他视图上。呜呼!我仍在将 Dajaxice 用于所有其他 AJAX 方法。

于 2011-12-29T21:43:50.960 回答