一个向用户发送`闪存消息`的软件包。
项目描述
闪存消息
用于向用户显示小消息的组件。
向当前用户发送消息
要向当前用户发送消息,您可以使用基于会话的消息源。让我们设置一个
>>> 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'
接收消息
生成的标准消息在接收时从源中删除自己。接收器将在将消息交给接收它的代码之前,调用消息上的 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...>]
全局接收器
还有一个全局接收器,它会查询所有设置为工具的消息源。让我们将一个会话消息源设置为工具
>>> 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
过滤消息类型
在从消息源中列出消息时,我们可以限制我们看到哪些消息。如果我们不指定类型,则返回所有消息。消息的默认类型为 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')) []
性能和可伸缩性问题
默认情况下,消息使用 zope.session 以持久方式存储在 ZODB 中。这可能会成为显著的伸缩性问题;有关更多信息,请参阅 zope.session 中的 design.txt。在将 flashmessages 用于未经身份验证的用户之前,您应该三思,因为这可能会在匿名页面视图上导致不必要的数据库增长,并在高负载下产生冲突错误。
一个解决方案是将您的系统配置为在 RAM 中存储 flashmessages。您可以通过配置提供 z3c.flashmessage.interfaces.IMessageSource 的工具,将工厂设置为 z3c.flashmessage.sources.RAMMessageSource,以及如果您应用程序期望的话,指定一个特定名称来实现这一点。
RAM 存储要快得多,消除了上述持久性问题,但有两个新的问题。首先,请注意,如果由于任何原因您的服务器进程重新启动,所有未读的闪存消息都将丢失。其次,如果您使用例如 ZEO 对应用程序服务器进行集群,您还必须确保您的负载均衡器支持会话亲和性(因此特定客户端总是击中同一个后端服务器)。这会在一定程度上减少集群的性能优势。
变更
3.0 (2023-02-08)
取消对 Python 2.7、3.4、3.5、3.6 的支持。
添加对 Python 3.8、3.9、3.10、3.11 的支持。
确保所有对象具有一致的解析顺序。
2.1 (2018-11-12)
声明支持 Python 3.6、3.7、PyPy 和 PyPy3。
取消对 Python 3.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)
初始公开发布。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪一个,请了解有关 安装包 的更多信息。
源代码发行版
构建分发版
z3c.flashmessage-3.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d512630c5bc7e3bfb11fa58018de21f7fa33195d650247dd0b533c5b4c9b7d96 |
|
MD5 | 39e47eed4ebecf64c8c85610e58599fd |
|
BLAKE2b-256 | 0d225a1797084a777b1afde17a88f861f2f552f0ecb655344147c1f3a7979723 |
z3c.flashmessage-3.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2e68faf87bbe3011bba79dd75a1b37ee309558a917ba7002569f2c6d9604fef6 |
|
MD5 | 79402f35455cece772b8db92829dba31 |
|
BLAKE2b-256 | ae768170e548a887ceae3db29b4254a6f3f722e12def5b25a9f9f07ab0629912 |