首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >学习Python,Python web应用程序在请求之间保持活动

学习Python,Python web应用程序在请求之间保持活动
EN

Stack Overflow用户
提问于 2012-08-22 09:01:56
回答 4查看 360关注 0票数 0

我是一个学习Python的PHP程序员,只要我有机会。

我读到Python web应用程序在两次请求之间保持活动。这意味着数据留在内存中,并在请求之间可用,对吗?

我想知道它是如何工作的。

在php中,我们放置一个带有唯一令牌的cookie,并将数据保存在会话中。会话是保存在磁盘或数据库上的阵列。在请求会话函数之间,根据具有唯一令牌的cookie恢复正确的会话数组。这意味着每个浏览器都有自己独特的会话,并且会话有一个预设的过期时间。如果用户处于非活动状态,并且触发了过期获取,那么会话将被清除。当用户返回时,必须创建一个新的会话。

我的理解是Python不需要这个,因为应用程序在请求之间保持活动。

在Python中,不是每个请求都有一个唯一的线程吗?

它如何区分请求,谁是请求者?

是否有将用户和应用程序之间的var分开的处理方法?

假设我保存了一个字典,这个字典是在来自任何浏览器的所有请求之间全局可用,还是只对那个浏览器可用。

何时以及如何清除内存。如果一切都留在记忆中。如果应用程序在没有重启的情况下运行了几年该怎么办?必须有某种到期设置或内存处理?

一位评论者说,这取决于网络应用程序。所以我使用Bottle.py来学习。

EN

回答 4

Stack Overflow用户

发布于 2012-08-22 09:15:23

我假设答案将取决于您在python中使用的web应用程序框架。它们中的一些包含会话管理组件,可以跨请求跟踪用户。但是,如果您只有一个基本的端口侦听器响应http,那么您将不得不自己构建任何cookie支持或会话管理。

另一个较大的区别是,在php中,您在服务器上安装了一个模块,实际的http服务器委托该模块来生成响应。PHP不处理响应的路由或实际服务。其中,python实际上可以是用于生成响应的服务器和资源。这取决于在运行服务器的机器上安装/访问python的方式。所以从这个意义上说,你可以在python web应用程序中做任何你想做的事情。

如果你感兴趣,你应该看看一些可用的python web frameworks

编辑:我看到你提到了bottle.py,开箱即用,它没有提供身份验证和会话管理,因为它是一个用于快速原型的微型框架,不一定适合大规模的应用程序(尽管不是不可能的,只是做了很多工作)。

票数 0
EN

Stack Overflow用户

发布于 2012-08-22 09:40:24

是也不是。如果你使用check out this question,你就会知道它是如何在Django应用程序中工作的。

然而,你陈述的方式,它将不会工作。在一个请求中定义一个字典而不将其传递到任何地方,以便在下一个请求中访问它,显然不会使它在其他请求中可用。所以,是的,你有这样做的选择,但这不是开箱即用的理由!

票数 0
EN

Stack Overflow用户

发布于 2012-08-23 17:16:26

在使用Twisted's web服务器之前,我能够在请求之间持久化Python语言中的对象。我还没有试着自己看看它是否会在不同的浏览器之间持续存在,但我有一种感觉。以下是文档中的代码片段:

Twisted包括一个事件驱动的web服务器。这是一个示例web应用程序;注意资源对象如何在内存中持久存在,而不是在每次请求时重新创建:

代码语言:javascript
代码运行次数:0
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12065072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档