【问题标题】:How can I share a dict between two different http requests如何在两个不同的 http 请求之间共享一个字典
【发布时间】:2012-08-17 02:58:14
【问题描述】:

Django 应用程序将数据从文件加载到 Python 字典,对其进行处理并将其作为 http 响应发送。现在说在 Web 服务器上收到 n 个请求,然后这个 Django 应用程序将运行 n 次并将数据从文件加载到 Python 字典 n 次。我想知道是否可以通过某种方式将这些数据仅加载到字典一次,同时可以提供n http 响应。

问题情况的view.py文件示例如下:

from django.http import HttpResponse
from django.http import HttpRequest

def hello(request):
    data = open("abc").readlines()
    return HttpResponse(data[0])

【问题讨论】:

    标签: python django shared-memory


    【解决方案1】:

    将字典绑定到全局名称将使其在 Django 项目运行期间一直存在。请注意,每个 Django 进程(一些 WSGI 容器,例如 mod_wsgi,可以为一个应用程序运行多个进程)都有自己独立的字典副本。

    【讨论】:

    • @Torsten:当然它不是。但这是由于问题的性质所致。
    • 我喜欢你的态度,但我们不应该建议用户使用更好的做法吗? :D
    • @Torsten:我没有看到你问他为什么他首先想要它。
    【解决方案2】:

    如果数据与用户相关,您可以使用 djanog 的session framework 跨请求持久化数据。如果需要在众多用户之间共享数据,您可以使用cache

    【讨论】:

    • 数据与用户无关,但请求中的 ips 范围已生成。
    【解决方案3】:

    这是Django Middleware 的工作。将其添加到您的设置中,它将在您的请求中持续存在。它是比持久性更好的选择,而且绝对比使用全局对象好得多。

    中间件是 Django 请求/响应处理的挂钩框架。这是一个轻量级的低级“插件”系统,用于全局更改 Django 的输入和/或输出。每个中间件组件负责做一些特定的功能。例如,Django 包含一个中间件组件 XViewMiddleware,它为 HEAD 请求的每个响应添加一个“X-View”HTTP 标头。

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2021-09-26
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2012-12-22
      • 2016-01-05
      • 2022-06-26
      • 1970-01-01
      相关资源
      最近更新 更多