- Python Pyramid教程
- Python Pyramid - 主页
- Python Pyramid - 概述
- Pyramid - 环境设置
- Python Pyramid - Hello World
- Pyramid - 应用程序配置
- Python Pyramid - URL 路由
- Python Pyramid - 查看配置
- Python Pyramid - 路由前缀
- Python Pyramid - 模板
- Pyramid - HTML 表单模板
- Python Pyramid - 静态资源
- Python Pyramid - 请求对象
- Python Pyramid - 响应对象
- Python Pyramid - 会话
- Python Pyramid - 事件
- Python Pyramid - 消息闪烁
- Pyramid - 使用 SQLAlchemy
- Python Pyramid - Cookiecutter
- Python Pyramid - 创建项目
- Python Pyramid - 项目结构
- Python Pyramid - 包结构
- 手动创建项目
- 命令行Pyramid
- Python Pyramid - 测试
- Python Pyramid - 日志记录
- Python Pyramid - 安全
- Python Pyramid - 部署
- Python Pyramid有用资源
- Python Pyramid - 快速指南
- Python Pyramid - 有用的资源
- Python Pyramid - 讨论
Python Pyramid - 会话
会话是客户端登录服务器和注销服务器之间的时间间隔。Session 对象也是一个字典对象,包含会话变量的键值对和关联值。在 Pyramid 中,它可作为请求对象的属性。
为了处理会话机制,Pyramid应用程序对象必须配置一个返回会话对象的会话工厂。Pyramid核心提供了一个基本的会话工厂,它使用cookie来存储会话信息。
默认会话工厂
Pyramid.session模块定义了SignedCookieSessionFactory类。它的对象需要一个密钥来对会话 cookie 信息进行数字签名。
from pyramid.session import SignedCookieSessionFactory my_session_factory = SignedCookieSessionFactory('abcQWE123!@#')
Configurator 类的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 虚拟环境文件夹内的子文件夹(称为“session”)中。请注意,此子文件夹必须有一个空的__init__.py文件才能将其视为包。
输出
运行 main.py 并输入http://localhost:6543/在浏览器中打开登录表单。
输入用户名并按“提交”按钮。给定的名称保存为“用户”会话变量。
“单击此处”链接读回会话变量并显示欢迎消息。
注销链接会弹出会话变量并将浏览器带回登录页面。