Bottle 自身並沒有提供Session的支持,,可以使用beaker中間件或自己實現。Beaker是一個緩存和會話的庫,與Web 應用程序和獨立的Python 腳本及應用程序一起使用。它是WSGI 的中間件,能夠很簡單地嵌入,與基於 WSGI 的 Web 應用程序一起使用,並且緩存修飾器對於任何基於 Python 的應用程序都是容易使用的。
beaker文檔:http://beaker.readthedocs.org/en/latest/index.html
安裝beaker
[root@ju bottle]# pip install beaker
下面直接上代碼:
[root@ju bottle]# cat session_test.py #!/usr/bin/env python #coding=utf-8 from bottle importroute,run,template,redirect,request,default_app from beaker.middleware importSessionMiddleware session_opts = { 'session.type':'file', #以文件的方式保存session 'session.cookei_expires':300, #session過期時間爲300秒 'session.data_dir':'/tmp/sessions_dir', #session保存目錄 'session.auto':True #自動保存session } @route('/login') def session_func(): return template('login') @route('/login', method='POST') def do_login(): username = request.forms.get('username') password = request.forms.get('password') if username =='ju' and password == '123': #這裏爲了方便,寫死用戶名和密碼,正常應該到數據庫去查詢,下一張我們講解如何操作數據庫 s = request.environ.get('beaker.session') #如果用戶名和密碼都正確,則獲取環境變量中的beaker.session對象,然後以字典的方式,往session對象添加用戶名,也可以添加其他信息。 s['user'] = username s.save() redirect('/') else: redirect('/login') @route('/') def index(): s= request.environ.get('beaker.session') username = s.get('user') #這裏的user的值,是從do_loging函數保存進來的 if not username: redirect('/login') return "登錄成功,%s" % username dapp = default_app() session_app = SessionMiddleware(dapp,session_opts) run(app=session_app,host='0.0.0.0',port=8000,debug=True)
在瀏覽器中輸入:http://192.168.116.199:8000/login
隨便輸入一個用戶明密碼還是這個login頁面,輸入ju:123之後會進入如下頁面:
我們查看一下/tmp/sessions_dir這個目錄:
[root@ju bottle]# tree /tmp/sessions_dir/ /tmp/sessions/ ├──container_file │ ├── h │ │ └── hX │ │ └── hXTaPNCGPNUnDDZi5h1JUih70OM.cache │ └── j │ └── jU │ └── jUqEPiJf6RgFx93G4ECD9qa_meQ.cache └──container_file_lock └── 5 ├── 59 │ └──59f3446002b04a9c2e9f49fb3a7b9b154d0d9694.lock └── 5b └──5b7c1da41560807436212ee66daeaed7c8b8a1fb.lock 9 directories, 4 files