A-A+

python bottle 框架基础教程:session

2015年05月26日 bottle 评论 1 条 阅读 8,171 views 次

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 框架环境安装

  1. pip install beaker

 

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

  1. #设置session参数
  2. session_opts = {
  3.     'session.type':'file',                          # 以文件的方式保存session
  4.     'session.cookei_expires':3600,        # session过期时间为3600秒
  5.     'session.data_dir':'/tmp/sessions',  # session存放路径
  6.     'sessioni.auto':True
  7.     }

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

 

然后在run的时候,要用:

  1. app = default_app()
  2. app = SessionMiddleware(app, session_opts)
  3. run(app=app,host='0.0.0.0', port=8080,debug=True)

 

以下是相关代码示例:

  1. [root@linuxyw bottle]# cat main.py 
  2. #/usr/bin/env python
  3. #coding=utf-8
  4. from bottle import route, run ,redirect,request,default_app
  5. from beaker.middleware import SessionMiddleware
  6. #设置session参数
  7. session_opts = {
  8.     'session.type':'file',                   # 以文件的方式保存session
  9.     'session.cookei_expires':3600,       # session过期时间为3600秒
  10.     'session.data_dir':'/tmp/sessions',  # session存放路径
  11.     'sessioni.auto':True
  12.     }
  13. @route('/login')
  14. def login():
  15.     return '''
  16.         <html>
  17.         <head>
  18.         </head>
  19.         <body>
  20.         <form action="/login" method="post">
  21.             Username: <input name="username" type="text" />
  22.             Password: <input name="password" type="password" />
  23.             <input value="Login" type="submit" />
  24.         </form>
  25.         </body>
  26.         </html>
  27.     '''
  28. @route('/login', method='POST')
  29. def do_login():
  30.         username = request.forms.get('username')
  31.         password = request.forms.get('password')
  32.         if username == 'linuxyw.com' and password == 'www.linuxyw.com':
  33.                 s = request.environ.get('beaker.session')  #如果帐号密码正确,则获取环境变量中的beaker.session对象,并赋值给s,然后我们就可以用字典的方式,往s里面添加一些我们要存进去的数据,如帐号名,帐号id,权限等等
  34.                 s['user'] = username
  35.                 s.save()
  36.         return redirect('/')
  37. @route('/')
  38. def index():
  39.         for k,v in request.environ.items():
  40.                 print "K:%s     V:%s" %(k,v)
  41.         s = request.environ.get('beaker.session') #获取session
  42.         username = s.get('user',None)   #从session中获取Key为user的值,是上面登陆的时候保存进来的
  43.         if not username:
  44.                 return redirect('/login')
  45.         return "欢迎你:%s" % username
  46. app = default_app()
  47. app = SessionMiddleware(app, session_opts)
  48. run(app=app,host='0.0.0.0', port=8080,debug=True)

 

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

帐号: linuxyw.com

密码:www.linuxyw.com

beaker.middleware

beaker.middleware

 

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

  1. [root@linuxyw bottle]# tree /tmp/sessions/
  2. /tmp/sessions/
  3. ├── container_file
  4. │   └── 6
  5. │       └── 65
  6. │           └── 65a0217e48d64191b01c28878b8419fc.cache 
  7. └── container_file_lock
  8.     └── a
  9.         └── ae
  10.             └── aecb616886c815cf35a2da619fd1ccbde8fb2340.lock  

 

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

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

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

SVN详情请跳转至:python bottle框架(WEB开发、运维开发)教程

 

 

1 条留言  访客:0 条  博主:0 条   引用: 1 条

来自外部的引用: 1 条

  • python bottle框架(WEB开发、运维开发)教程 | linux系统运维

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: