Django应用,提供临时通知。
项目描述
Django应用,提供临时通知。
通知消息将一直持续到请求检索它们为止。
安装
将中间件添加到您的MIDDLEWARE_CLASSES设置中(默认的临时存储依赖于Django的contrib.sessions应用程序,因此将其放在SessionMiddleware之后)
'django_notify.middleware.NotificationsMiddleware',
为了便于在模板中访问通知,请将上下文处理器添加到您的TEMPLATE_CONTEXT_PROCESSORS设置中
'django_notify.context_processors.notifications',
使用方法
添加通知消息
中间件将一个名为notifications的临时存储类实例附加到您的request上。要添加通知,请调用
request.notifications.add('Hello world.')
其他一些方法提供了添加通知的标准方式,这些方法通常使用常用标签(这些标签通常表示为消息的HTML类)
request.notifications.debug('%s SQL statements were executed.' % count) request.notifications.success('Profile details updated.') request.notifications.warning('Your account expires in three days.') request.notifications.error('Document deleted.')
显示通知消息
在您的模板中,使用类似以下内容
{% if notifications %} <ul class="messages"> {% for message in notifications %} <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> {% endfor %} </ul> {% endif %}
如果您正在使用上下文处理器,则应使用RequestContext渲染模板。否则,请确保request.notifications对模板上下文可用。
通知消息的过期
当遍历存储实例时,将标记通知以清除(并且在处理响应时清除)。
为了避免通知被清除,您可以在迭代后设置 request.notifications.used = False。
通知级别
可以使用 NOTIFICATIONS_LEVEL 设置来更改最小记录级别。尝试添加低于此级别的通知将被忽略。
内置的级别(可以直接从 django_notify 导入)包括
常量 |
级别 |
默认标签 |
---|---|---|
DEBUG |
10 |
debug |
INFO |
20 |
|
SUCCESS |
25 |
success |
WARNING |
30 |
warning |
ERROR |
40 |
error |
INFO 是默认的最小记录级别。它也是 add 方法的默认级别。
最小记录级别也可以通过更改通知存储实例的 level 属性来按请求设置
import django_notify # Change the notifications level to ensure the debug message is added. request.notifications.level = django_notify.DEBUG request.notifications.debug('Test notification...') # Set the notifications level back to default. request.notifications.level = None
临时存储后端
Django notify 可以使用不同的后端来存储临时消息。要更改正在使用的后端,请将 NOTIFICATIONS_STORAGE 添加到您的设置中,引用存储类的模块和类。例如
NOTIFICATIONS_STORAGE = 'cookie.CookieStorage'
Django Notify 首先在 django_notify.storage 内部查找模块,如果没有找到,则尝试直接导入提供的完整模块。
Django Notify 包含三个临时存储类
- 'session.SessionStorage'
此类将所有消息存储在请求的会话中。它需要 Django 的 contrib.session 应用程序。
- 'cookie.CookieStorage'
此类将通知数据存储在 cookie 中(使用密钥哈希签名以防止篡改),以在请求之间持久化通知。如果 cookie 数据大小超过 4096 字节,则丢弃旧消息。
- 'fallback.FallbackStorage'
这是默认的临时存储类。
此类使用 CookieStorage 存储所有通知消息,对于无法适应单个 cookie 的消息,则回退到使用 SessionStorage。
由于它使用 SessionStorage,因此也需要 Django 的 contrib.session 应用程序。
要编写自己的,请在 django_notify.storage.base 中的 BaseStorage 类派生子类,并编写 _get 和 _store 方法。