Django 使用一个 python 会话响应来自不同浏览器的不同请求

Django responding to different request from different browser with one python session

我实际上是一名 php(CodeIgniter) 网络开发人员,尽管我喜欢 python 我刚刚安装了 Bitnami's Django Stack,其中包含 Apache、MySQL、PostgreSQL 和 Python 2.7.9 安装了 Django。在安装过程中,它生成了一个简单的 Django 项目。

虽然它看起来很熟悉,但我开始向它添加一些代码行,但是当我保存它并刷新页面甚至重新启动浏览器时,我发现 python 实例仍然是 运行旧脚本。脚本仅在我重新启动 Apache 服务器时更新(我相信那是 Python 实例终止的地方)。

所以,为了用 Python 澄清这个问题,我创建了一个简单的视图并将其链接到 r'^test/'

from django.http import HttpResponse

i = 0

def test_view(request):
    global i
    i += 1
    return HttpResponse(str(i))

然后我发现,即使在不同的浏览器之间切换,i 值也会继续增加,即随着其他浏览器的增加,值会继续增加。

那么,谁能告诉我这是 Django 的默认行为还是我的 Apache 安装有问题。

这是默认行为,如果您是 运行 gunicorn 并在 X 次请求左右后杀死工人,它 可能 重置,我不记得了。之所以如此,是因为应用程序会在请求得到服务后继续 运行。

我使用 PHP 已经有一段时间了,但我相信,收到一个请求,php 启动 运行 一个脚本,该脚本 returns 输出和然后该脚本终止。除了像 $_SESSION 这样的特殊全局变量,没有什么可以真正跨请求。

你的 Django 应用程序启动并继续 运行 除非有东西告诉它重新加载(当 运行 ./manage.py runserver 它会在检测到代码更改时重新加载,这就是你想要在开发过程中)。

如果您对每位访问者的数据感兴趣,请参阅 session data。它看起来像:

request.session['i'] = request.session.get('i', 0) + 1

您可以在其中存储访问者的数据,这些数据会一直存在,直到他们失去会话。