向用户发送异步消息(例如,从离线脚本)。与Celery集成很有用。
项目描述
为django提供简单的异步消息。与Celery配合良好。
问题
这解决了什么问题?
假设用户引发了一个您正在离线处理(例如使用Celery)的昂贵任务。这个库提供了一个简单的机制,当任务完成时通知用户,利用Django的消息框架。
有什么例子吗?
您可能使用Celery生成一个大型报告,然后使用这个库通知用户他们的报告已准备好下载。用户将在提交消息后,在他们的下一个请求中看到您发送的消息。
它如何工作?
使用缓存来持久化消息,并使用中间件来拾取这些消息并将其提交到Django的消息框架。都非常简单。
没有其他库能做这个吗?
是的,有 - 但它们以不同的方式解决这个问题
django-offline-messages - 这为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 请求。
许可证
变更日志
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e271c316642e0d52945d94c91bcc0902389b33ff5331cdd8b0078443e87d4681 |
|
MD5 | bfc6c79eb0d56bf008ae50024030219e |
|
BLAKE2b-256 | 65c276d74e6209f5b9fa4775bef8a88ca9794188145f3175af25b673d58e8b88 |