會話是客戶端登錄服務(wù)器和退出服務(wù)器之間的一個時間間隔。會話對象也是一個字典對象,包含會話變量的鍵值對和相關(guān)值。在Pyramid中,它可以作為請求對象的一個屬性。
為了處理會話機(jī)制,Pyramid應(yīng)用程序?qū)ο蟊仨毰渲靡粋€會話工廠,以返回會話對象。Pyramid核心提供了一個基本的會話工廠,它使用cookies來存儲會話信息。
pyramid.session 模塊定義了 SignedCookieSessionFactory 類。它的對象需要一個秘鑰來對會話cookie信息進(jìn)行數(shù)字簽名。
from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory('abcQWE123!@#')
配置器類的 set_session_factory() 方法使用這個工廠對象來設(shè)置會話。
config.set_session_factory(my_session_factory)
一旦這樣做了,會話對象就可以作為 request.session 屬性來實現(xiàn)了。要添加一個會話變量,請使用 –
request.session['user'] = 'Admin'
要檢索一個會話變量,請使用 –
user=request.session['user']
要刪除一個會話變量,請使用 pop() 方法。
request.session.pop('user')
下面描述的是會話變量在Pyramid應(yīng)用程序中的使用。首先,登錄路線(與login()視圖函數(shù)相關(guān)聯(lián))在瀏覽器上彈出一個登錄表單。
@view_config(route_name='login')
def login(request):
html="""
<html>
<body>
<form action='/add'> Enter User name :
<input type='text' name='user'>
<input type='submit' value='submit'>
</form>
</body>
</html>
"""
return Response(html)
add()函數(shù)讀取’user’表單屬性并使用其值來添加一個會話變量。
@view_config(route_name='addsession')
def add(request):
request.session['user']=request.params['user']
return Response("<h2>Session object added.</h2><br><h3><a href='/read'>click here</a></h3>")
read()視圖讀回會話變量數(shù)據(jù)并顯示歡迎信息。
@view_config(route_name='readsession')
def read(request):
user=request.session['user']
response="<h2>Welcome {} </h2>".format(user)+"<br><h3><a href='/logout'>Logout</a></h3>"
return Response(response)
這些視圖與會話工廠一起被添加到應(yīng)用程序配置中。
config.set_session_factory(my_session_factory)
config.add_route('login','/')
config.add_route('logout','/logout')
config.add_route('addsession', '/add')
config.add_route('readsession', '/read')
config.scan('session')
以下是完整的代碼
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory('abcQWE123!@#')
@view_config(route_name='login')
def login(request):
html="""
<html>
<body>
<form action='/add'>
Enter User name :
<input type='text' name='user'>
<input type='submit' value='submit'>
</form>
</body>
</html>
"""
return Response(html)
@view_config(route_name='addsession')
def add(request):
request.session['user']=request.params['user']
return Response("<h2>Session object added.</h2><br><h3><a href='/read'>click here</a></h3>")
@view_config(route_name='readsession')
def read(request):
user=request.session['user']
response="<h2>Welcome {} </h2>".format(user)+"<br><h3><a href='/logout'>Logout</a>>/<h3>"
return Response(response)
@view_config(route_name='logout')
def logout(request):
request.session.pop('user')
response="<h2>You have been logged out </h2><br><h3><a href='/'>Login</a></h3>"
return Response(response)
if __name__ == '__main__':
with Configurator() as config:
config.set_session_factory(my_session_factory)
config.add_route('login','/')
config.add_route('logout','/logout')
config.add_route('addsession', '/add')
config.add_route('readsession', '/read')
config.scan('session')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
將這個腳本作為main.py保存在Pyramid虛擬環(huán)境文件夾下的一個子文件夾(稱為 “會話”)中。注意,這個子文件夾必須有一個空的 __init__.py 文件,它才能被當(dāng)作一個包。
運行main.py并輸入 http://localhost:6543/, 在瀏覽器中打開登錄表單。
輸入用戶名并按下 “提交 “按鈕。給定的名字被保存為 “user “會話變量。
點擊這里 “的鏈接讀 回會話 變量并顯示歡迎信息。
注銷鏈接會彈 出會話 變量并將瀏覽器帶回登錄頁面。
更多建議: