bottle框架學習(七)之session的使用

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

wKioL1WGcYyBUoo3AABj2TBkTgA682.jpg

隨便輸入一個用戶明密碼還是這個login頁面,輸入ju123之後會進入如下頁面:

 wKiom1WGb9fCZm3QAABJI3BYMNI926.jpg


我們查看一下/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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章