Pyramid 会话

2023-03-30 17:40 更新

会话是客户端登录服务器和退出服务器之间的一个时间间隔。会话对象也是一个字典对象,包含会话变量的键值对和相关值。在Pyramid中,它可以作为请求对象的一个属性。

为了处理会话机制,Pyramid应用程序对象必须配置一个会话工厂,以返回会话对象。Pyramid核心提供了一个基本的会话工厂,它使用cookies来存储会话信息。

默认的会话工厂

pyramid.session 模块定义了 SignedCookieSessionFactory 类。它的对象需要一个秘钥来对会话cookie信息进行数字签名。

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

配置器类的 set_session_factory() 方法使用这个工厂对象来设置会话。

config.set_session_factory(my_session_factory)

一旦这样做了,会话对象就可以作为 request.session 属性来实现了。要添加一个会话变量,请使用 –

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

要检索一个会话变量,请使用 –

user=request.session['user']

要删除一个会话变量,请使用 pop() 方法。

request.session.pop('user')

会话实例

下面描述的是会话变量在Pyramid应用程序中的使用。首先,登录路线(与login()视图函数相关联)在浏览器上弹出一个登录表单。

@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()函数读取’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()视图读回会话变量数据并显示欢迎信息。

@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)

这些视图与会话工厂一起被添加到应用程序配置中。

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虚拟环境文件夹下的一个子文件夹(称为 “会话”)中。注意,这个子文件夹必须有一个空的 __init__.py 文件,它才能被当作一个包。

输出

运行main.py并输入 http://localhost:6543/, 在浏览器中打开登录表单。

Python Pyramid - 会话

输入用户名并按下 “提交 “按钮。给定的名字被保存为 “user “会话变量。

Python Pyramid - 会话

点击这里 “的链接读 回会话 变量并显示欢迎信息。

Python Pyramid - 会话

注销链接会弹 出会话 变量并将浏览器带回登录页面。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号