Webpy 会话:AttributeError:“ThreadedDict”对象没有属性“用户名”;

发布于 2024-12-13 16:00:15 字数 588 浏览 0 评论 0原文

我正在使用 web.py 在 python 中制作一个 web 应用程序,我已经设置了表并可以登录用户和所有内容,但会话的初始化程序似乎不起作用。

我的代码中有以下内容:

store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})

render = web.template.render('templates/', base='base', globals={'session': session, 'username': session.username})

但这会引发错误: AttributeError:'ThreadedDict'对象没有属性'username'

可以做什么?我基本上只是按照这里的例子:
http://webpy.org/cookbook/sessions

I am making a webapp in python using web.py, I have set up the tables and can login the user and everything, but the initializer for sessions doesn't seem to work.

I have the following in my code:

store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})

render = web.template.render('templates/', base='base', globals={'session': session, 'username': session.username})

But this throws the error:
AttributeError: 'ThreadedDict' object has no attribute 'username'

What can be done? I basically just followed the example here:
http://webpy.org/cookbook/sessions

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花开半夏魅人心 2024-12-20 16:00:15

我遇到了同样的问题,因此我使用 _initializer 属性来获取会话数据。

下面是一个示例:

store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})

session_data = session._initializer
render = web.template.render('templates/', base='base', globals={'session': session_data, 'username': session_data['username']})

然后您可以从会话访问在初始化程序中声明的所有数据。如果有人有更好的方法,请告诉我。

PS:我知道已经晚了,但迟到总比不来好……

I had the same issue, so i used the _initializer property to get session data.

Here's an example:

store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store, initializer={'logged_in': 0, 'username': ''})

session_data = session._initializer
render = web.template.render('templates/', base='base', globals={'session': session_data, 'username': session_data['username']})

You can then access all the data you declared in the initializer from session. If anyone has a better way, please let me know.

PS: I know its late, but better late then never...

心的憧憬 2024-12-20 16:00:15

会话仅在处理请求时加载,在设置过程中无法获取其属性。

Session is only loaded when request is processed, you cannot get its attributes during setup.

念﹏祤嫣 2024-12-20 16:00:15

您正在尝试在设置会话变量之前获取它。

我注意到 session.username 在某些情况下有效。但在 WSGI 下却失败了。

这工作正常,在 webpy 文档中:

session.get('username', False)

不是:

session.username

如果您想在初始化程序中使用预设,使用@Antonis-kalou 的答案中的方法。

session_data = session._initializer
session.get('username', session_data['username'])

You are trying to get a session variable before it's set.

I've noticed that session.username works in some circumstances. But under WSGI it fails.

This works fine and is in the webpy docs :

session.get('username', False)

Not :

session.username

If you want to use the presets in the initializer, use the method in @Antonis-kalou 's answer.

session_data = session._initializer
session.get('username', session_data['username'])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文