【问题标题】:django: cleanest way to save every page serveddjango:保存每个页面的最干净的方法
【发布时间】:2012-08-17 21:59:06
【问题描述】:

我想跟踪我的 django 网站的所有用户都在做什么。我想通过保存提供给他们的每个 HTML 页面来做到这一点。最简单的方法是什么?我目前正在考虑制作一个装饰器,在提供 HTML 之前将其保存到文件中,但这需要在我的所有视图上添加该装饰器,这似乎并不理想。

【问题讨论】:

    标签: python django


    【解决方案1】:

    我相信更好的方法是保存用户所做的查询,因为您始终可以从查询中重新生成 html。然后您可以编写一个中间件来处理所有传入的请求As per here 并将查询保存到数据库中。如果你真的想保存 html,你可以使用process_response 函数进行保存。 Source

    【讨论】:

    • 我不仅要保存查询,还要保存 POST 数据、GET 数据等...此外,我的代码和模板可能会更改,这意味着我将无法重新生成与用户看到的完全相同
    • 我相信中间件可以访问请求对象,因此可以访问 GET 和 POST 数据。为什么不使用模板编号保存数据,以便与版本控制系统结合使用。根据docs.djangoproject.com/en/dev/topics/http/middleware/…,中间件也可以访问响应。
    • hmm 中间件似乎确实是要走的路!谢谢,我看看
    • 如果您只保存请求,则生成响应时数据库本身的状态也需要保存。然而,中间件是一个答案。响应中间件将允许您记录响应。
    • 中间件解决方案效果很好!接受这个答案,因为它是第一个建议的答案。我最终只是保存了生成的.html
    【解决方案2】:

    使用 django 信号。

    request_finished 信号在 Django 完成处理 HttpRequest 时被调用,这发生在您返回页面的每个视图的末尾。在这里,您可以访问响应中设置的params,并按照向用户显示的方式生成页面,或者只需保存response_object,然后运行批处理以将其离线可视化。

    Signal documentation

    【讨论】:

      【解决方案3】:

      您可以实现per site cache,然后查询缓存以获取您的统计信息。然而,正如其他中间件所发布的那样,这似乎很理想。

      但是 - 请记住,每个请求都会调用中间件,因此如果您正在执行 i/o 繁重的任务,例如数据库写入,则会对您网站的性能产生负面影响。

      【讨论】:

        猜你喜欢
        • 2018-11-07
        • 2012-06-29
        • 2011-12-02
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多