向用户发送“flash消息”的包。
z3c.flashmessage的Python项目详细描述
内容
Flash messages
组件向用户显示小消息。
Sending a message to the current user
要向当前用户发送消息,可以使用基于会话的消息 来源。设置一个:
>>> from z3c.flashmessage.sources import SessionMessageSource >>> from __future__ import unicode_literals >>> source = SessionMessageSource()
>>> source.send('The world will come to an end in 40 seconds!')
源允许列出所有当前消息:
>>> m = list(source.list()) >>> m [<z3c.flashmessage.message.Message object at 0x...>] >>> m[0].message 'The world will come to an end in 40 seconds!' >>> str(m[0].type) 'message'
Receiving messages
生成的标准消息在
收到。接收者将在消息被调用之前对其调用prepare()
分发给接收它的代码:
>>> m[0].prepare(source) >>> list(source.list()) []
还有另一个默认消息在 阅读:
>>> from z3c.flashmessage.message import PersistentMessage >>> source.send(PersistentMessage('I will stay forever!')) >>> m = list(source.list())[0] >>> m.message 'I will stay forever!' >>> m.prepare(source) >>> list(source.list()) [<z3c.flashmessage.message.PersistentMessage object at 0x...>]
Global receiver
有一个全局接收器,它查询设置为 公用事业。让我们将会话消息源设置为实用程序:
>>> from zope.component import provideUtility >>> provideUtility(source) >>> source.send('Test!')
>>> from z3c.flashmessage.sources import RAMMessageSource >>> source2 = RAMMessageSource() >>> provideUtility(source2, name='other') >>> source2.send('Test 2!') >>> source2.send('Test 3!')
>>> from z3c.flashmessage.receiver import GlobalMessageReceiver >>> receiver = GlobalMessageReceiver() >>> m = list(receiver.receive()) >>> len(m) 4 >>> m[0].message 'I will stay forever!' >>> m[1].message 'Test!' >>> m[2].message 'Test 2!' >>> m[3].message 'Test 3!'
在接受者发出信息后,它们就从 消息源,因为接收者通知消息 阅读:
>>> len(list(receiver.receive())) 1
Filtering message types
当列出来自消息源的消息时,我们可以限制
看。如果我们不给出类型,则返回所有消息。默认类型
消息的message
:
>>> source3 = RAMMessageSource() >>> source3.send('Test 2!') >>> list(source3.list()) [<z3c.flashmessage.message.Message object at 0x...>] >>> list(source3.list('message')) [<z3c.flashmessage.message.Message object at 0x...>] >>> list(source3.list('somethingelse')) []
Performance and Scalability Issues
默认情况下,使用 Zope.会议。这可能是一个重大的可伸缩性问题;请参见 有关详细信息,请参阅zope.session中的design.txt。你应该想想 在为未经身份验证的用户使用FlashMessages之前,执行两次,如下所示 很容易导致匿名页面上不必要的数据库增长 视图,以及重载下的冲突错误。
一种解决方案是将系统配置为在 猛撞。您可以通过配置一个提供 z3c.flashmessage.interfaces.IMessageSource工厂设置为 z3c.flashmessage.sources.RAMMessageSource,如果 您的应用程序需要一个。
RAM存储速度更快,消除了持久性问题 但有两个新问题。首先,要意识到 如果服务器进程因任何原因重新启动,则所有未读 FlashMessages将丢失。其次,如果对应用程序进行集群 使用zeo的服务器,还必须确保您的负载平衡器 支持会话关联(因此特定的客户端总是命中相同的 后端服务器)。这在一定程度上降低了 集群。
CHANGES
2.1 (2018-11-12)
- 声明支持python 3.6、3.7、pypy和pypy3。
- 放弃对Python3.3的支持。
- 放弃对python setup.py test的支持。
2.0 (2016-08-08)
- 标准化命名空间__init__。
- 声明python 3.3、3.4和3.5的兼容性。
1.3 (2010-10-28)
- SessionMessageSource在客户端 从源读取消息。已更改内部API,因此读取“否” 较长的会话创建时,它还不存在。
1.2 (2010-10-19)
- 已删除对
zope.app.zcmlfiles
的测试依赖项。
1.1 (2010-10-02)
- 消除了对
zope.app.testing
的测试依赖。
1.0 (2007-12-06)
- 更新了对
zope.session
的依赖关系,而不是zope.app.session
以获取 消除贬损警告。
1.0b2 (2007-09-12)
- 错误修复:当源中有多条消息时,并非所有消息 将由接收者返回。
1.0b1 (2007-08-22)
- 首次公开发行。