Django应用程序,用于扩展Django的消息框架,添加了粘性消息和持久消息
项目描述
Django Messages Extends
Django应用程序,通过添加“粘性”和“持久”后端消息存储来扩展Django的消息框架。这也支持将持久消息发送到机器到用户的进程中的其他用户。
存储
粘性存储
“粘性”消息是指用户必须点击关闭按钮才能在当前会话中移除的消息。
- 对于在中间件中或仅针对当前请求的消息,不需要保存。
- 这与默认设置非常相似,只是你必须明确关闭对话框才能移除消息。
- 此后端从不保存任何内容,只是模拟执行该操作。
持久化存储
“持久”消息是指消息在多个会话中保持不变,直到用户点击关闭按钮。消息存储在默认的_storage容器中(默认为数据库)。
- 仅对已认证用户,消息存储在数据库中。
- 消息必须被明确阅读,并且显示在未关闭之前。
安装
本文档假定您熟悉Python和Django。
-
下载并解压应用程序,或使用
pip
安装$ pip install django-messages-extends
-
确保
messages_extends
位于您的PYTHONPATH
中。 -
将
messages_extends
添加到您的INSTALLED_APPS
设置中。
INSTALLED_APPS = (
...
'messages_extends',
)
- 确保Django的
MessageMiddleware
在您的MIDDLEWARE_CLASSES
设置中(默认情况下就是这样)
MIDDLEWARE_CLASSES = (
...
'django.contrib.messages.middleware.MessageMiddleware',
)
- 将messages_extends URL添加到您的URL配置中。例如,为了使消息在
http://domain.com/messages/
下可用,请将以下行添加到urls.py
中。
urlpatterns = patterns('',
(r'^messages/', include('messages_extends.urls')),
...
)
- 在您的设置中,将消息存储后端设置为
messages_extends.storages.FallbackStorage
MESSAGE_STORAGE = 'messages_extends.storages.FallbackStorage'
-
使用以下方式设置数据库表:
$ manage.py makemigratations $ manage.py migrate
-
如果您想使用捆绑的模板,请将
templates
目录添加到您的TEMPLATE_DIRS
设置中
TEMPLATE_DIRS = (
...
'path/to/messages_extends/templates')
)
在视图和模板中使用消息
消息级别
Django的消息框架为各种目的提供了消息级别,例如成功消息、警告等。此应用程序提供具有相同名称的常量,区别在于具有这些级别的消息将是持久的
from messages_extends import constants as constants_messages
# default messages level
constants_messages.DEBUG = 10
constants_messages.INFO = 20
constants_messages.SUCCESS = 25
constants_messages.WARNING = 30
constants_messages.ERROR = 40
# persistent messages level
constants_messages.DEBUG_PERSISTENT = 9
constants_messages.INFO_PERSISTENT = 19
constants_messages.SUCCESS_PERSISTENT = 24
constants_messages.WARNING_PERSISTENT = 29
constants_messages.ERROR_PERSISTENT = 39
# sticky messages level
constants_messages.DEBUG_STICKY = 8
constants_messages.INFO_STICKY = 18
constants_messages.SUCCESS_STICKY = 23
constants_messages.WARNING_STICKY = 28
constants_messages.ERROR_STICKY = 38
添加消息
由于应用程序作为Django的消息存储后端实现,您仍然可以使用常规Django API添加消息
from django.contrib import messages
messages.add_message(request, messages.INFO, 'Hello world.')
或使用messages_extends.constants中的常量创建持久消息
from django.contrib import messages
from messages_extends import constants as constants_messages
messages.add_message(request, constants_messages.WARNING_PERSISTENT, 'You are going to see this message until you mark it as read.')
或通过快捷方式。
messages.add_persistant_error(request, 'Houston we have a problem..')
请注意,这仅适用于登录用户,因此您可能需要确保当前用户不是匿名用户,使用request.user.is_authenticated()
。为匿名用户添加持久消息将引发NotImplementedError
。
以及粘性消息
from django.contrib import messages
from messages_extends import constants as constants_messages
messages.add_message(request, constants_messages.WARNING_STICKY, 'You will going to see this messages only in this request')
如果消息应发送给除当前认证用户之外的用户,您还可以向此函数传递一个User
对象。用户Sally将在下次登录时看到此消息
from django.contrib import messages
from messages_extends import constants as constants_messages
from django.contrib.auth.models import User
sally = User.objects.get(username='Sally')
messages.add_message(request, constants_messages.INFO_PERSISTENT, "Hola abc desde %s" %request.user, user=sally)
对于持久存储,还有其他参数,例如expires,它是一个datetime。
显示消息
消息可以按照Django手册中所述显示。然而,您可能还想包含用于关闭每个消息的链接标签(即标记为已读)。在您的模板中,使用如下内容:
{% for message in messages %}
<div class="alert {% if message.tags %} alert-{{ message.tags }} {% endif %}">
{# close-href is used because href is used by bootstrap to closing other divs #}
<a class="close" data-dismiss="alert"{% if message.pk %} close-href="{% url message_mark_read message.pk %}"{% endif %}>×</a>
{{ message }}
</div>
{% endfor %}
您还可以使用捆绑的模板。以下行替换了上面的代码。它允许用户使用bootstrap样式(您需要使用bootstrap.css和boostrap.js)来删除消息
{% include "messages_extends/includes/alerts_bootstrap.html" %}
要使用Ajax将其标记为已读,您可以添加以下代码,该代码与jQuery一起工作
$("a.close[close-href]").click(function (e) {
e.preventDefault();
$.post($(this).attr("close-href"), "", function () {
});
}
);
或使用
<script src="{% static "close-alerts.js" %}"></script>
别忘了:如果您启用了CSRF,您必须通过js添加CSRF代码,请参阅Django文档
如果您不想在粘性警报中看到关闭按钮,您可以使用CSS隐藏它们
.alert.sticky .close{
display: none;
}
其他后端
您可以使用其他后端,默认使用
MESSAGES_STORAGES = ('messages_extends.storages.StickyStorage',
'messages_extends.storages.PersistentStorage',
'django.contrib.messages.storage.cookie.CookieStorage',
'django.contrib.messages.storage.session.SessionStorage'))
但您可以在设置中添加或删除其他后端,以便您需要执行此操作。请记住,会话存储会保存所有消息,因此您必须将其放在最后。
请记住
请记住,此模块仅用于应用程序消息,对于用户间的消息,您可以使用postman或其他框架,对于活动流的消息,您可以使用django-activity-stream
许可协议
Django Messages Extends 在MIT 许可证 (MIT)下提供。
致谢
Django Messages Extends 是由Ali Lozano发起的项目。额外的致谢归于
灵感来源于并基于django-persistent-messages
项目详情
下载文件
为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
哈希值 for django_messages_extends-0.6.3-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 98002494ef9bec95be7374bb13ae1eb4db5ca2fd08a98f3c12f2865022591ab6 |
|
MD5 | c5c68d6cd04367b3511a865b02ac98b2 |
|
BLAKE2b-256 | ac8392aba507e68532c75935b9c15c17a42debad06acd92dd4f646e39e91a314 |