web.py 0.3 新手指南 - 在子应用下使用session

justjavac 发表于 2012-04-19

提示

这个解决方案是来自web.py邮件列表。this

问题

如何在子应用中使用session?

解法

web.py默认session信息只能在主应用中共享,即便在其他模块中import Session都不行。在app.py(或main.py)可以这样初始化session:

session = web.session.Session(app, web.session.DiskStore('sessions'),
initializer = {'test': 'woot', 'foo':''})

.. 接下来创建一个被web.loadhook加载的处理器(processor)

def session_hook():
    web.ctx.session = session

app.add_processor(web.loadhook(session_hook))

.. 在子应用(假设是sub-app.py)中,可以这样操作session:

print web.ctx.session.test
web.ctx.session.foo = 'bar'

web.py 0.3 新手指南 - Sessions

justjavac 发表于 2012-04-19

问题

如何在web.py中使用session

解法

注意!!!:session并不能在调试模式(Debug mode)下正常工作,这是因为session与调试模试下的重调用相冲突(有点类似firefox下著名的Firebug插件,使用Firebug插件分析网页时,会在火狐浏览器之外单独对该网页发起请求,所以相当于同时访问该网页两次),下一节中我们会给出在调试模式下使用session的解决办法。

web.session模块提供session支持。下面是一个简单的例子--统计有多少人正在使用session(session计数器):

import web web.config.debug = False urls = ( "/count", "count", "/reset", "reset" ) app = web.application(urls, locals()) session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'count': 0}) class count: def GET(self): session.count += 1 return str(session.count)...

web.py 0.3 新手指南 - 在调试模式下使用session

justjavac 发表于 2012-04-19

问题

如何在调试模式下使用session?

解法

使用web.py自带的webserver提供web服务时,web.py就运行在调试模式下。当然最简单的办法就是禁用调试,只要令web.config.debug = False即可。

import web web.config.debug = False # rest of your code

如果非要用调试模式下使用session,可以用非主流的一些办法。哈哈

因为调试模式支持模块重载入(重载入,绝非重载。是reload,而非override),所以reloader会载入主模块两次,因此,就会创建两个session对象。但我们只要把session存储在全局的数据容器中,就能避免二次创建session。

下面这个例子就是把session保存在 web.config中:

import web urls = ("/", "hello") app = web.application(urls, globals()) if web.config.get('_session') is None: session = web.session.Session(app, web.session.DiskStore('sessions'),...

web.py 0.3 新手指南 - 在template中使用session

justjavac 发表于 2012-04-19

问题:

我想在模板中使用session(比如:读取并显示session.username)

解决:

在应用程序中的代码:

render = web.template.render('templates', globals={'context': session})

在模板中的代码:

<span>You are logged in as <b>$context.username</b></span>

你可以真正的使用任何符合语法的python变量名,比如上面用的_context_。我更喜欢在应用中直接使用’session’。

web.py 0.3 新手指南 - 如何用Gmail发送邮件

justjavac 发表于 2012-04-19

问题

如何用Gmail发送邮件?

解法

安装和维护邮件服务器通常是沉闷乏味的。所以如果你有Gmail帐号,就可以使用Gmail做为SMTP服务器来发送邮件,我们唯一要做的就只是在web.config中指定Gmail的用户名和密码。

web.config.smtp_server = 'smtp.gmail.com'
web.config.smtp_port = 587
web.config.smtp_username = 'cookbook@gmail.com'
web.config.smtp_password = 'secret'
web.config.smtp_starttls = True

设置好之后,web.sendmail就能使用Gmail帐号来发送邮件了,用起来和其他邮件服务器没有区别。

web.sendmail('cookbook@gmail.com', 'user@example.com', 'subject', 'message')

可以在这里了解有关Gmail设置的更多信息 GMail: Configuring other mail clients