【问题标题】:Not able to get web.py sessions to work using python 2.6 on OS X无法在 OS X 上使用 python 2.6 使 web.py 会话正常工作
【发布时间】:2012-03-21 00:37:22
【问题描述】:

我似乎无法让这个脚本工作:

import web
web.config.debug=False

urls = (
  '/', 'hello',
  '/bye/', 'bye')


app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore('sessions'),
                              initializer={'count': 0})

class hello:
    def GET(self):
        session.count += 1
        return "You visited " + str(session.count) + " pages."

class bye:
    def GET(self):
        session.kill()
        return ("Bye, web!")

if __name__ == "__main__":
    app.run()

这是可从 web.py 文档页面获得的代码:http://webpy.org/cookbook/sessions

当我尝试通过转到http://localhost:1234/ 来访问“hello”页面时,应用程序返回一个内部服务器错误。

这是访问此资源时终端的输出:

http://0.0.0.0:1234/
Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/web/application.py", line 237, in process
    return self.handle()
  File "/Library/Python/2.6/site-packages/web/application.py", line 228, in handle
    return self._delegate(fn, self.fvars, args)
  File "/Library/Python/2.6/site-packages/web/application.py", line 409, in _delegate
    return handle_class(cls)
  File "/Library/Python/2.6/site-packages/web/application.py", line 385, in handle_class
    return tocall(*args)
  File "testing.py", line 15, in GET
    session.count += 1
  File "/Library/Python/2.6/site-packages/web/session.py", line 69, in __getattr__
    return getattr(self._data, name)
AttributeError: 'ThreadedDict' object has no attribute 'count'

127.0.0.1:49207 - - [20/Mar/2012 20:34:01] "HTTP/1.1 GET /" - 500 Internal Server Error

有哪位 web.py 专家可以告诉我这是怎么回事吗?

【问题讨论】:

  • 您的代码与 Python 2.7.2 和 web.py 0.36 一样。
  • 我也有同样的问题,谁能帮忙?
  • 我不知道是否可能是这种情况,但如果您使用的是磁盘存储,那么您的 web.py 代码所在的同一文件夹中应该有一个会话文件夹。它应该是可写的。

标签: python web.py


【解决方案1】:

改变 app = web.application(urls, globals())

到 app = web.application(urls, locals())

【讨论】:

  • 我试过了,结果一样。我认为我的 python 安装/配置有问题。
【解决方案2】:

我安装并配置了 Python 2.7.2 的 Macports 版本,但仍然得到类似的结果。

我突然想到这可能是权限问题,因为会话的存储位置。我尝试使用来自 Apple 的 Python 2.7 和 Python 2.6 运行“sudo”,并运行

sudo python myfile.py 1234

Web.py 会话现在正在工作。 @Eduardo Ivanec:我将尝试使用您的说明设置我的 Python 开发环境。再次感谢!

【讨论】:

    【解决方案3】:

    您的代码与 Python 2.7.2 和 web.py 0.36 一样工作。如果您运行的是旧版本,我会升级,因为示例是有效的。

    您的初始化程序似乎无法正常工作。您可以尝试使用这个 sn-p 来在第一次使用时初始化 count 属性:

    class hello:
        def GET(self):
            try:
                session.count += 1
            except AttributeError:
                session.count = 1
            return "You visited " + str(session.count) + " pages."
    

    编辑:由于您使用的是 OS X,this link 可能会有所帮助。它描述了如何使用标准 OS X 工具和 virtualenv 设置全新的 Python 环境。我使用 GNU/Linux,但它看起来不错。此外,您可以在official download page 中下载准备好的版本。

    【讨论】:

    • 我试过了,还是没有骰子。我认为我的 python 安装/配置有问题。
    • @topmulch:查看我关于在 OS X 中设置新 Python 环境的编辑。
    • 很好的文档。我从来没有设置 virtualenv,我应该。谢谢。
    【解决方案4】:

    我以前遇到过这个问题。 对于 500 内部错误,请使用 chmod -R 755 your_foler/sessions
    更改文件夹的权限。

    【讨论】:

      【解决方案5】:

      问题是python版本。我有同样的问题,我在执行 2.7 版本的 python 时解决了它。 只需执行> python2.7 code.py 即可完美运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-06
        • 2016-04-25
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 2016-01-24
        • 2018-05-25
        • 2015-05-10
        相关资源
        最近更新 更多