跳转到主要内容

Django应用程序,用于扩展Django的消息框架,添加了粘性消息和持久消息

项目描述

Django Messages Extends

Test PyPI version

Django应用程序,通过添加“粘性”和“持久”后端消息存储来扩展Django的消息框架。这也支持将持久消息发送到机器到用户的进程中的其他用户。

存储

粘性存储

“粘性”消息是指用户必须点击关闭按钮才能在当前会话中移除的消息。

  • 对于在中间件中或仅针对当前请求的消息,不需要保存。
  • 这与默认设置非常相似,只是你必须明确关闭对话框才能移除消息。
  • 此后端从不保存任何内容,只是模拟执行该操作。

持久化存储

“持久”消息是指消息在多个会话中保持不变,直到用户点击关闭按钮。消息存储在默认的_storage容器中(默认为数据库)。

  • 仅对已认证用户,消息存储在数据库中。
  • 消息必须被明确阅读,并且显示在未关闭之前。

安装

本文档假定您熟悉Python和Django。

  1. 下载并解压应用程序,或使用pip安装

     $ pip install django-messages-extends
    
  2. 确保messages_extends位于您的PYTHONPATH中。

  3. messages_extends添加到您的INSTALLED_APPS设置中。

INSTALLED_APPS = (
    ...
    'messages_extends',
)
  1. 确保Django的MessageMiddleware在您的MIDDLEWARE_CLASSES设置中(默认情况下就是这样)
MIDDLEWARE_CLASSES = (
    ...
    'django.contrib.messages.middleware.MessageMiddleware',
)
  1. 将messages_extends URL添加到您的URL配置中。例如,为了使消息在http://domain.com/messages/下可用,请将以下行添加到urls.py中。
urlpatterns = patterns('',
    (r'^messages/', include('messages_extends.urls')),
    ...
)
  1. 在您的设置中,将消息存储后端设置为messages_extends.storages.FallbackStorage
MESSAGE_STORAGE = 'messages_extends.storages.FallbackStorage'
  1. 使用以下方式设置数据库表:

     $ manage.py makemigratations
     $ manage.py migrate
    
  2. 如果您想使用捆绑的模板,请将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

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-messages-extends-0.6.3.tar.gz (11.2 kB 查看哈希值)

上传时间

构建分布

django_messages_extends-0.6.3-py3-none-any.whl (13.5 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

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