跳转到主要内容

向用户发送异步消息(例如,从离线脚本)。与Celery集成很有用。

项目描述

为django提供简单的异步消息。与Celery配合良好。

问题

这解决了什么问题?

假设用户引发了一个您正在离线处理(例如使用Celery)的昂贵任务。这个库提供了一个简单的机制,当任务完成时通知用户,利用Django的消息框架。

有什么例子吗?

您可能使用Celery生成一个大型报告,然后使用这个库通知用户他们的报告已准备好下载。用户将在提交消息后,在他们的下一个请求中看到您发送的消息。

它如何工作?

使用缓存来持久化消息,并使用中间件来拾取这些消息并将其提交到Django的消息框架。都非常简单。

没有其他库能做这个吗?

是的,有 - 但它们以不同的方式解决这个问题

这个实现的优点是什么?

  • 它简单、快速且易于使用。

  • 它与现有的Django缓存和消息框架协同工作。无论您使用什么缓存后端,以及消息使用的存储后端,它都将工作。

有什么缺点?

  • 如果用户快速在页面之间导航,他们可能会错过消息。但这通常是Django消息框架的一个通用问题。

安装

从PyPI(稳定版)

pip install django-async-messages

从Github(不稳定版)

pip install git+git://github.com/codeinthehole/django-async-messages#egg=djang-async-messages

'async_messages.middleware.AsyncMiddleware'添加到您的MIDDLEWARE_CLASSES。确保它位于'django.contrib.messages.middleware.MessageMiddleware'之后。

您需要在设置中配置 CACHES 才能使其正常工作。通常,memcache 是最佳选择。请注意,本地内存缓存 不适用,因为每个进程都有自己的私有缓存,Celery 任务无法与 web 服务器进程缓存通信。

使用

向单个用户发送消息

>>> from async_messages import message_user
>>> from django.contrib.auth.models import User
>>> barry = User.objects.get(username='barry')
>>> message_user(barry, "Barry, your report is ready")

向许多用户发送消息

>>> from async_messages import message_users
>>> staff = User.objects.filter(is_staff=True)
>>> message_users(staff, "All budgets must be spent by the end of the day")

指定消息级别

>>> from django.contrib.messages import constants
>>> message_users(staff, "Boom!", constants.WARNING)

向单个用户发送多条消息

>>> from async_messages import message_user
>>> from django.contrib.auth.models import User
>>> barry = User.objects.get(username='barry')
>>> message_user(barry, "Barry, your report is queued up for processing")
>>> # do more awesome stuff
>>> message_user(barry, "Barry, your report is ready")

向单个用户发送消息的替代方法,模仿 django.contrib.messages API

>>> from async_messages import messages
>>> barry = User.objects.get(username='barry')
>>> messages.debug(barry, "Barry was here")
>>> messages.info(barry, "Hi, Barry")
>>> messages.success(barry, "Barry, your report is ready")
>>> messages.warning(barry, "Barry, you didn't lock your session")
>>> messages.error(barry, "You are not Barry")

贡献

分叉、克隆并创建一个虚拟环境。然后运行

make install

使用以下方式运行测试

./runtests.py

请使用 'develop' 作为目标分支提交 pull 请求。

许可证

MIT

变更日志

0.3.1

  • 修复了没有用户属性的请求实例的 bug

0.3

  • 模仿 django.contrib.messages API 向用户发送消息

0.2

  • 添加了排队多条消息的可能性

0.1.2

  • 修改了 Django 的依赖关系,使其仅支持 1.2+

0.1.1

  • 修改了中间件以使用 process_response

  • 更好的 docstrings

0.1

  • 最小可行性产品

项目详情


下载文件

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

源分布

django-async-messages-0.3.1.tar.gz (4.1 kB 查看哈希值)

上传时间

支持