跳转到主要内容

一个向用户发送`闪存消息`的软件包。

项目描述

闪存消息

用于向用户显示小消息的组件。

向当前用户发送消息

要向当前用户发送消息,您可以使用基于会话的消息源。让我们设置一个

>>> 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 (11.8 kB 查看哈希)

上传时间 源代码

构建分发版

z3c.flashmessage-3.0-py3-none-any.whl (12.4 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面