向用户发送异步消息(例如从脱机脚本)。有助于与芹菜融合
django-async-messages的Python项目详细描述
Django的简单异步消息。与芹菜搭配很好。
问题
这能解决什么问题?
假设一个用户发起了一个昂贵的任务,而您正在离线处理(例如 用芹菜)。这个库提供了一个简单的机制来通知用户 任务完成后,使用django的消息传递框架。
什么是例子?
您可以使用芹菜生成一个大报告,然后使用此库来 通知用户其报告已准备好下载。用户将看到 当他们在消息之后提出下一个请求时,您发送给他们的消息 已提交。
它是如何工作的?
缓存用于持久化消息,而中间件用于获取这些消息 并提交给Django’s messaging framework。一切都很简单。
难道没有其他的图书馆能做到这一点吗?
是的,有-但他们以不同的方式解决问题:
- django-offline-messages-这提供了另一种存储后端 django的消息框架可以使用。
- django-notifications
这个实现有什么好处?
- 它简单、快速、易用。 LI>与现有的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是最好的选择。注意local memory caching不适合作为 每个进程都有自己的私有缓存,芹菜任务无法与 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")
贡献
分叉,克隆并创建一个virtualenv。然后运行:
make install
使用以下命令运行测试:
./runtests.py
请使用“development”作为目标分支提交请求。
许可证
更改日志
0.3.1
- 修复没有用户属性的请求实例的错误
0.3
- 用于向用户发送消息的模拟django.contrib.messagesapi
0.2
- 增加了将多条消息排队的可能性
0.1.2
- 对django的依赖性更改为只有1.2+
0.1.1
- 更改了中间件以使用process_response。
- 更好的文档字符串
0.1
- 最小可行产品