我是一个学习Python的PHP程序员,只要我有机会。
我读到Python web应用程序在两次请求之间保持活动。这意味着数据留在内存中,并在请求之间可用,对吗?
我想知道它是如何工作的。
在php中,我们放置一个带有唯一令牌的cookie,并将数据保存在会话中。会话是保存在磁盘或数据库上的阵列。在请求会话函数之间,根据具有唯一令牌的cookie恢复正确的会话数组。这意味着每个浏览器都有自己独特的会话,并且会话有一个预设的过期时间。如果用户处于非活动状态,并且触发了过期获取,那么会话将被清除。当用户返回时,必须创建一个新的会话。
我的理解是Python不需要这个,因为应用程序在请求之间保持活动。
在Python中,不是每个请求都有一个唯一的线程吗?
它如何区分请求,谁是请求者?
是否有将用户和应用程序之间的var分开的处理方法?
假设我保存了一个字典,这个字典是在来自任何浏览器的所有请求之间全局可用,还是只对那个浏览器可用。
何时以及如何清除内存。如果一切都留在记忆中。如果应用程序在没有重启的情况下运行了几年该怎么办?必须有某种到期设置或内存处理?
一位评论者说,这取决于网络应用程序。所以我使用Bottle.py来学习。
发布于 2012-08-22 01:15:23
我假设答案将取决于您在python中使用的web应用程序框架。它们中的一些包含会话管理组件,可以跨请求跟踪用户。但是,如果您只有一个基本的端口侦听器响应http,那么您将不得不自己构建任何cookie支持或会话管理。
另一个较大的区别是,在php中,您在服务器上安装了一个模块,实际的http服务器委托该模块来生成响应。PHP不处理响应的路由或实际服务。其中,python实际上可以是用于生成响应的服务器和资源。这取决于在运行服务器的机器上安装/访问python的方式。所以从这个意义上说,你可以在python web应用程序中做任何你想做的事情。
如果你感兴趣,你应该看看一些可用的python web frameworks。
编辑:我看到你提到了bottle.py,开箱即用,它没有提供身份验证和会话管理,因为它是一个用于快速原型的微型框架,不一定适合大规模的应用程序(尽管不是不可能的,只是做了很多工作)。
发布于 2012-08-22 01:40:24
是也不是。如果你使用check out this question,你就会知道它是如何在Django应用程序中工作的。
然而,你陈述的方式,它将不会工作。在一个请求中定义一个字典而不将其传递到任何地方,以便在下一个请求中访问它,显然不会使它在其他请求中可用。所以,是的,你有这样做的选择,但这不是开箱即用的理由!
发布于 2012-08-23 09:16:26
在使用Twisted's web服务器之前,我能够在请求之间持久化Python语言中的对象。我还没有试着自己看看它是否会在不同的浏览器之间持续存在,但我有一种感觉。以下是文档中的代码片段:
Twisted包括一个事件驱动的web服务器。这是一个示例web应用程序;注意资源对象如何在内存中持久存在,而不是在每次请求时重新创建:
from twisted.web import server, resource
from twisted.internet import reactor
class HelloResource(resource.Resource):
isLeaf = True
numberRequests = 0
def render_GET(self, request):
self.numberRequests += 1
request.setHeader("content-type", "text/plain")
return "I am request #" + str(self.numberRequests) + "\n"
reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()
https://stackoverflow.com/questions/12065072
复制相似问题