pythonsession文档_python bottle 框架基础教程:session | linux系统运维

Bottle 自身并没有提供 Session 的支持,因为在一个迷你框架里面,没有合适的方法来实现。根据需求和使用环境,你可以使用 beaker 中间件或自己来实现。

beaker相关文档:http://beaker.readthedocs.org/en/latest/index.html

Beaker 是一个缓存和会话的库,与 Web 应用程序和独立的 Python 脚本及应用程序一起使用。它是 WSGI 的中间件,能够很简单地嵌入,与基于 WSGI 的 Web 应用程序一起使用,并且缓存修饰器对于任何基于 Python 的应用程序都是容易使用的。

延迟加载会话:在一个请求中拥有活动的会话也不会运行,除非它们被实际地使用。

性能:当进行缓存时,利用一个多读器/单写器锁定系统,以防止 Dog-Pile 的影响。

多后端:会话和缓存是基于文件、DBM 文件、memcached、memory 和数据库后端可用的(通过 SQLAlchemy)。

基于 Cookie 的会话:为客户端基于 Cookie 的会话存储使用带有可选的 AES 加密的 SHA-1 签名。

灵活的缓存:数据能以每函数形式被存储,使用不同的后端、不同的期限和不同的键。

可扩展的后端:使用支持新后端的 setuptools 入口点来添加更多的后端。

要用使用breaker,需要安装一下哦,不会安装请看《python bottle 框架环境安装》

pip install beaker

然后要在文件里导入相关的beaker方法:

#设置session参数

session_opts = {

'session.type':'file',                          # 以文件的方式保存session

'session.cookei_expires':3600,        # session过期时间为3600秒

'session.data_dir':'/tmp/sessions',  # session存放路径

'sessioni.auto':True

}

Session 数据存放在'/tmp/' 目录里面,/tmp/有个机制,会自动清理30天后末使用过的文件,有点类型于回收站,所以把 session文件放在这里,是最合适的,你不需要担心session文件不断增多的问题。当然也可以用memcached来存放session,便我们在这里,仅使用file类型来示例。

然后在run的时候,要用:

app = default_app()

app = SessionMiddleware(app, session_opts)

run(app=app,host='0.0.0.0', port=8080,debug=True)

以下是相关代码示例:

[root@linuxyw bottle]# cat main.py

#/usr/bin/env python

#coding=utf-8

from bottle import route, run ,redirect,request,default_app

from beaker.middleware import SessionMiddleware

#设置session参数

session_opts = {

'session.type':'file',                   # 以文件的方式保存session

'session.cookei_expires':3600,       # session过期时间为3600秒

'session.data_dir':'/tmp/sessions',  # session存放路径

'sessioni.auto':True

}

@route('/login')

def login():

return '''

Username: 

Password: 

'''

@route('/login', method='POST')

def do_login():

username = request.forms.get('username')

password = request.forms.get('password')

if username == 'linuxyw.com' and password == 'www.linuxyw.com':

s = request.environ.get('beaker.session')  #如果帐号密码正确,则获取环境变量中的beaker.session对象,并赋值给s,然后我们就可以用字典的方式,往s里面添加一些我们要存进去的数据,如帐号名,帐号id,权限等等

s['user'] = username

s.save()

return redirect('/')

@route('/')

def index():

for k,v in request.environ.items():

print "K:%s     V:%s" %(k,v)

s = request.environ.get('beaker.session') #获取session

username = s.get('user',None)   #从session中获取Key为user的值,是上面登陆的时候保存进来的

if not username:

return redirect('/login')

return "欢迎你:%s" % username

app = default_app()

app = SessionMiddleware(app, session_opts)

run(app=app,host='0.0.0.0', port=8080,debug=True)

打开浏览器访问首页,会被跳转到login登陆页,除非登陆正确,否则会一直跳到login页面中,登陆正确的话,就会跳到首页去了,我用程序上写死的帐号和密码来登陆看看效果

帐号: linuxyw.com

密码:www.linuxyw.com

beaker.middleware

在看看/tmp/session下面生成的 session文件(只要刚才session正常使用才会生成)

[root@linuxyw bottle]# tree /tmp/sessions/

/tmp/sessions/

├── container_file

│   └── 6

│       └── 65

│           └── 65a0217e48d64191b01c28878b8419fc.cache

└── container_file_lock

└── a

└── ae

└── aecb616886c815cf35a2da619fd1ccbde8fb2340.lock

大家可以运行上面的代码演示一下,代码上提到SVN中,有需要的朋友可在SVN下载

如果有不懂的,可以看bottle官网文档

官方文档:http://www.bottlepy.org/docs/dev/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值