向用户发送异步消息(例如从脱机脚本)。有助于与芹菜融合

django-async-messages的Python项目详细描述


Django的简单异步消息。与芹菜搭配很好。

问题

这能解决什么问题?

假设一个用户发起了一个昂贵的任务,而您正在离线处理(例如 用芹菜)。这个库提供了一个简单的机制来通知用户 任务完成后,使用django的消息传递框架。

什么是例子?

您可以使用芹菜生成一个大报告,然后使用此库来 通知用户其报告已准备好下载。用户将看到 当他们在消息之后提出下一个请求时,您发送给他们的消息 已提交。

它是如何工作的?

缓存用于持久化消息,而中间件用于获取这些消息 并提交给Django’s messaging framework。一切都很简单。

难道没有其他的图书馆能做到这一点吗?

是的,有-但他们以不同的方式解决问题:

这个实现有什么好处?

  • 它简单、快速、易用。
  • 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”作为目标分支提交请求。

许可证

MIT

更改日志

0.3.1

  • 修复没有用户属性的请求实例的错误

0.3

  • 用于向用户发送消息的模拟django.contrib.messagesapi

0.2

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

0.1.2

  • 对django的依赖性更改为只有1.2+

0.1.1

  • 更改了中间件以使用process_response
  • 更好的文档字符串

0.1

  • 最小可行产品

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java根据两个数组的值对数组进行排序   具有自签名证书和NTLM代理的java Maven SSL repo错误   java自定义字体按钮不工作AndroidStudio   java通过Spring MVC web应用程序向客户端发送文本文件   Java Spring Web服务SOAP身份验证   ANT property environment=“env”无法在JAVA中检索它,但如果作为ANT命令运行,则可以正常工作   java是为spring mvc rest api或spring boot api对应用服务器的每个新请求创建的服务、存储库和组件的新实例吗?   java私有静态最终字符串未完成其工作   PKCS12的安全Java密钥重新处理   java JPA继承表每类SQLSyntaxErrorException