Pyramid 會(huì)話

2023-03-30 17:40 更新

會(huì)話是客戶端登錄服務(wù)器和退出服務(wù)器之間的一個(gè)時(shí)間間隔。會(huì)話對(duì)象也是一個(gè)字典對(duì)象,包含會(huì)話變量的鍵值對(duì)和相關(guān)值。在Pyramid中,它可以作為請(qǐng)求對(duì)象的一個(gè)屬性。

為了處理會(huì)話機(jī)制,Pyramid應(yīng)用程序?qū)ο蟊仨毰渲靡粋€(gè)會(huì)話工廠,以返回會(huì)話對(duì)象。Pyramid核心提供了一個(gè)基本的會(huì)話工廠,它使用cookies來(lái)存儲(chǔ)會(huì)話信息。

默認(rèn)的會(huì)話工廠

pyramid.session 模塊定義了 SignedCookieSessionFactory 類。它的對(duì)象需要一個(gè)秘鑰來(lái)對(duì)會(huì)話cookie信息進(jìn)行數(shù)字簽名。

from pyramid.session import SignedCookieSessionFactory
my_session_factory = SignedCookieSessionFactory('abcQWE123!@#')

配置器類的 set_session_factory() 方法使用這個(gè)工廠對(duì)象來(lái)設(shè)置會(huì)話。

config.set_session_factory(my_session_factory)

一旦這樣做了,會(huì)話對(duì)象就可以作為 request.session 屬性來(lái)實(shí)現(xiàn)了。要添加一個(gè)會(huì)話變量,請(qǐng)使用 –

request.session['user'] = 'Admin'

要檢索一個(gè)會(huì)話變量,請(qǐng)使用 –

user=request.session['user']

要?jiǎng)h除一個(gè)會(huì)話變量,請(qǐng)使用 pop() 方法。

request.session.pop('user')

會(huì)話實(shí)例

下面描述的是會(huì)話變量在Pyramid應(yīng)用程序中的使用。首先,登錄路線(與login()視圖函數(shù)相關(guān)聯(lián))在瀏覽器上彈出一個(gè)登錄表單。

@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’表單屬性并使用其值來(lái)添加一個(gè)會(huì)話變量。

@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()視圖讀回會(huì)話變量數(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)

這些視圖與會(huì)話工廠一起被添加到應(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()

將這個(gè)腳本作為main.py保存在Pyramid虛擬環(huán)境文件夾下的一個(gè)子文件夾(稱為 “會(huì)話”)中。注意,這個(gè)子文件夾必須有一個(gè)空的 __init__.py 文件,它才能被當(dāng)作一個(gè)包。

輸出

運(yùn)行main.py并輸入 http://localhost:6543/, 在瀏覽器中打開(kāi)登錄表單。

Python Pyramid - 會(huì)話

輸入用戶名并按下 “提交 “按鈕。給定的名字被保存為 “user “會(huì)話變量。

Python Pyramid - 會(huì)話

點(diǎn)擊這里 “的鏈接讀 回會(huì)話 變量并顯示歡迎信息。

Python Pyramid - 會(huì)話

注銷鏈接會(huì)彈 出會(huì)話 變量并將瀏覽器帶回登錄頁(yè)面。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)