17:临时数据使用会话¶
在Pyramid会话中存储和检索非永久数据。
背景¶
当人们使用您的Web应用程序时,他们经常执行需要保存半永久数据的任务。例如,购物车。这叫A session .
Pyramid对会话有基本的内置支持。第三方软件包,如 pyramid_redis_sessions 提供更丰富的会话支持。或者您可以创建自己的自定义会话引擎。让我们看看 built-in sessioning support .
目标¶
使用内置的简单Pyramid会话系统创建会话工厂。
更改代码以使用会话。
步骤¶
首先我们复制
view_classes
步骤:cd ..; cp -r view_classes sessions; cd sessions $VENV/bin/pip install -e .
我们的
sessions/tutorial/__init__.py
需要选择会话工厂才能注册到 configurator :1from pyramid.config import Configurator 2from pyramid.session import SignedCookieSessionFactory 3 4 5def main(global_config, **settings): 6 my_session_factory = SignedCookieSessionFactory( 7 'itsaseekreet') 8 config = Configurator(settings=settings, 9 session_factory=my_session_factory) 10 config.include('pyramid_chameleon') 11 config.add_route('home', '/') 12 config.add_route('hello', '/howdy') 13 config.scan('.views') 14 return config.make_wsgi_app()
我们的观点
sessions/tutorial/views.py
现在可以使用request.session
:1from pyramid.view import ( 2 view_config, 3 view_defaults 4 ) 5 6 7@view_defaults(renderer='home.pt') 8class TutorialViews: 9 def __init__(self, request): 10 self.request = request 11 12 @property 13 def counter(self): 14 session = self.request.session 15 if 'counter' in session: 16 session['counter'] += 1 17 else: 18 session['counter'] = 1 19 20 return session['counter'] 21 22 23 @view_config(route_name='home') 24 def home(self): 25 return {'name': 'Home View'} 26 27 @view_config(route_name='hello') 28 def hello(self): 29 return {'name': 'Hello View'}
模板在
sessions/tutorial/home.pt
可以显示值:1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <title>Quick Tutorial: ${name}</title> 5</head> 6<body> 7<h1>Hi ${name}</h1> 8<p>Count: ${view.counter}</p> 9</body> 10</html>
确保测试仍然通过:
$VENV/bin/pytest tutorial/tests.py -q .... 4 passed in 0.42 seconds
运行 Pyramid 应用程序时使用:
$VENV/bin/pserve development.ini --reload
在浏览器中打开http://localhost:6543/和http://localhost:6543/howdy。当您在这些URL之间重新加载和切换时,请注意计数器会增加,并且 not 特定于URL。
重新启动应用程序并重新访问页面。注意,计数器仍然会从停止的位置增加。
分析¶
Pyramid request 对象现在有一个 session
可以在视图代码中使用的属性。它就像一本字典。
因为所有视图都使用同一个计数器,所以我们在视图类级别将计数器设置为python属性。这样,每次重新加载都会增加模板中显示的计数器。
在Web开发中,“flash messages”是用户在未来的Web请求之后需要出现在屏幕上的注释。例如,当使用窗体添加项时 POST
,网站通常会发出第二个HTTP重定向Web请求以查看新项目。您可能希望在第二个Web请求后出现一条消息,说明“您的项目已添加”。您不能将其返回到日志的Web响应中,因为它将在第二个Web请求期间被丢弃。
flash消息是一种技术,消息可以在请求之间存储,使用会话,然后在最终显示时删除。
参见
会议 , Flash消息 和 pyramid.session .