如果我想使用CGI会话,我应该考虑哪些Python模块?

3
鉴于我对Python中的Web框架一无所知,并且希望保持非常简单(因为我很蠢),以便制作一个简单的原型,是否有任何流畅、简单、“电池包含在内”的模块可用?(我的Python职业生涯还太短,无法评估框架、选择并学习它。)我看到了一个名为“Cookie”的模块,可以作为基础,但没有特定于会话的内容。
我熟悉基本的会话概念,在经典ASP中使用过它们,并在Perl中深入了解了它们,但我没有看到很多针对Python的内容。Beaker看起来很有趣,但文档似乎需要WSGI中间件,这又回到了框架问题。
我在ActiveState上找到了一个旧的会话配方,显然需要一些改进。保存的信息不是任何人都会担心被抓取的内容,因此虽然我通常非常注重安全性,但我愿意在这个原型中放松一点。
还是说这是一个“自己动手”的问题?
我将在IIS 7.0上使用Python 2.6。

2
Apache可以轻松简单地安装在Windows上。 - jmucchiello
再次强调,我对IIS的了解比对Apache更深入。目标服务器已经安装了IIS。目标网站已经在IIS下运行。出于政治和一些技术原因,它已经从Apache转移到了IIS。我不会仅仅为了开源而安装Apache。 - MetaHyperBolic
1
很好。但我不太了解Apache。我非常了解IIS。所以对我来说,Apache并不更简单。而且我不会把所有东西都迁回Apache,因为那也是更多的工作。所有这些事情都使得Apache对我来说更加复杂。在这种情况下,Apache对我完全没有任何好处。没有任何奖励。而且它甚至与我的问题无关。请把你的LAMP议程留在门外。 - MetaHyperBolic
如果其他人也不干涉,我就会离开它。不幸的是,在计算机文化中存在着悠久的历史:“如果我不知道答案,那么问题和提问者必须受到质疑。” 具体来说,似乎没有人知道任何模块,所以问题变成了“为什么选择IIS?”尽管这与手头的问题完全无关,但某人必须提出至关重要的问题:为什么这不是完全开源的? - MetaHyperBolic
@MetaHyperBolic,你能接受一个答案或者说明是否需要更多信息吗? - Joschua
显示剩余4条评论
3个回答

3
我认为web2py(Web框架)对您来说足够简单。我认为这是制作网站或Web服务的最简单方法。这也比理解Cookie或其他与Web相关的Python模块更容易。
您只需键入以下内容即可开始会话:
session.your_session_name = "blabla" # or whatever you want to store

要制作一个cookie,只需看这里

在web2py中,您无需配置任何内容。只需下载并启动web2py.py(您必须安装python 2.6<)。您还可以找到一些示例Web幻灯片

Python Cookie模块仅仅是将一些值保存在类似于字典的对象中,但我认为您必须自己将其存储在硬盘上。


这是一个框架,而不是一个模块,这很遗憾。它似乎是建立在CherryPy之上的。它有一个管理界面,所以还有其他事情需要烦恼,更加令人沮丧。主页上的内容提到了与Twitter的集成——这时我就要拿起我的左轮手枪了。 - MetaHyperBolic
是的,这有点麻烦,但你只使用一个cookie模块想做什么呢?另外,web2py的response.cookies ['name']是基于Python的Cookie模块的SimpleCookie构建的。 - Joschua
它不是建立在cherrypy之上的。只有在没有更好的web服务器时,它才使用cherrypy web服务器。例如,如果你有Apache+mod_wsgi,它就不会使用任何cherrypy代码。 - mdipierro
原帖有小修正。除非禁用,否则会话始终处于打开状态。在以下代码中:session.your_session_name = "blabla"“your_session_name”不是您的会话名称。它将是您使用名称“your_session_name”存储会话的变量。例如:session.your_variable = "bla" session.your_other_variable = "blablabla" - mdipierro
@MetaHyperbolic。管理界面是一个基于web2py构建的应用程序,随web2py一起提供,可以被删除,并且对于web2py的工作来说并不需要它。该管理界面使用Twitter通知新闻。底层库只是Python模块(如DAL或模板引擎或表单生成),您可以从shell访问这些模块。确实,web2py模块具有很多相互依赖关系,因此如果您只需要会话,则应考虑更轻量级的选项。 - mdipierro

0

0

WSGI不是一个框架,也不需要您选择一个框架——它是在任何支持Python的Web服务器上运行任何Python Web应用程序框架的标准方式,包括CGI。如果您有一个名为app的WSGI应用程序,并且想在CGI上运行它,请参阅文档并使用wsgiref.handlers.CGIHandler().run(app),如文档所述。

因此,您可以完全通过WSGI(在CGI之上)使用Beaker——例如,采用Beaker的文档中的示例,只需添加(所需的导入和)上面的run调用(使用该示例构造的wsgi_app对象,当然还有一个session.save以及如Beaker文档所解释的其他必要内容)。

丰富或繁重的框架有其存在的价值,但像 Beaker 这样的轻量级、灵活的组件也同样重要——而 WSGI 中间件是利用这些组件的绝佳方式,无需任何“框架式”的安排,只需要好老的 WSGI(在 CGI 或其他任何东西之上)。

顺便说一句,在 IIS 上运行 WSGI 的最佳方式可能是 isapi-wsgi(我只能说“可能”,因为我没有 IIS 安装来测试它;-)。但只要您编写符合 WSGI 标准的代码(使用任何框架或根本不使用框架),那么这只是一种优化——您的应用程序不会改变(除了您需要调用的处理程序的 run 或等效方法之外;-),无论它运行在 CGI、通过 ISAPI 在 IIS 上、Google App Engine 上还是任何其他服务器和接口组合上。


这仍然不相关。我正在寻找Python模块。不是框架,不是其他必须添加的东西。在Perl中可以通过使用CGI :: Session模块来解决这些限制,虽然不太美观但也很实用。如果答案是“我不知道有哪些Python模块可以做到这一点;你必须自己编写”,那么说出来也完全没问题。 - MetaHyperBolic
@Meta,wsgiref是一个模块,beaker.middleware是一个模块,isapi-wsgi - 它们不是框架,你所谓的“层次化”(我想这意味着装饰器和其他高阶函数)只是在Python中使用模块的一种方法,与从中调用函数或继承其类一样多也不少 - Python倾向于使用函数习语(如HOF、genexps和其他迭代器等),不少于过程式或OOP习语(当然,会话在范式意义上并不是“功能性”的;-)。真可悲,你就是拒绝看到这一点。 - Alex Martelli
很遗憾,你没有理解我的问题。你建议我安装其他东西(isapi-wsgi),但我只是在寻找一个模块。一个不需要安装框架、.exes或者放在ISAPI层的东西。你试图向我推销SUV,而我只是想要一辆踏板车。如果你没有踏板车,那完全没关系,我不会生气。Perl可以使用CGI::Session来实现这个功能。没有ISAPI层的东西,也没有框架。它只是一个模块。如果Python没有类似的模块,那也是可以接受的结果。看起来就是这种情况。 - MetaHyperBolic
@Meta,请仔细再次阅读我的回复:isapi-wsgi只是第四段中的“顺便提一下”(你知道BTW代表什么,对吧?),第一句话解释了如何在Python标准库的CGI上运行wsgi应用程序(它只是一个您编写的遵循某些约定的函数)--无需安装框架,无需exe文件,也不需要放在ISAPI层中的任何东西。您的抱怨和无法理解简单英语的能力真是悲惨! - Alex Martelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接