DjangoQ与Django租户模式的集成包

django-tenant-schemas-q的Python项目详细描述


Django租户模式Q

Django-Tenant Schemas Q是Django-Q集群的一个定制实现,用于使用Django租户模式包在Django项目中实现多租户,Postgres作为数据库服务。使用这个包,开发人员可以将Django项目设置为多租户,并将Django-Q集群设置为按租户/模式工作。这个包可以与Django-ORM之外的任何其他代理一起工作。在

为什么需要这个包裹?在

尽管有包tenant schemas celery支持多租户的芹菜,但我对django-q项目非常感兴趣,并正在探索使django-qdjango-q一起工作的可能性。在

安装

pip安装django-tenant-schemas-q

这应该安装django租户模式django-q。在

如何设置?在

作为一名开发人员,我经常发现设置项目、包和正确配置有时是一项相对困难的工作。为了使这项工作顺利进行,只需遵循以下步骤。在

  • 请参阅django_tenant_schemas所需的设置here

  • 按照上述链接中的说明设置django_tenant_schemas。这将负责django_tenant_schemas的设置。在

  • django_q添加到租户应用程序设置中。这将在每个租户迁移后设置任务、时间表等模型。在

  • 接下来设置需要运行的Django-Q集群,以便处理任务并运行调度程序。在

  • 在为集群设置配置时,将使用Django-Q支持的除Django ORM之外的任何其他代理。

  • 最后,在设置文件中添加一个设置SCHEMAS_到“被调度程序排除在外”。此设置的值是要从计划程序中排除的架构列表,如果未指定,则默认情况下,计划程序将按名称public排除架构。在

这怎么办

假设您完全按照说明进行了操作,那么现在应该有如下设置

SHARED_APPS=['租户模式','包含'租户模式'的应用','需要的任何其他应用程序']

TENANT_APPS=['django_q','standard_django_APPS','any_other_APPS_needed']

已安装的_APPS=['tenant_schemas','app_containing_tenant_model','django_q','standard_django_APPS','any_other_app_needed']

租户模式='应用程序_名称.ModelName'

SCHEMAS\u TO_BE_EXCLUDED_BY_SCHEDULER=['public']

Q_CLUSTER={}#Q集群的配置

这些设置的作用很简单。它只需为每个模式创建Task&Schedule模型。Django-Q使用这些模块来存储任务和时间表。随着这些模型现在按模式/租户进行设置,事情变得更干净了。在

要运行集群,请使用命令python manage.py mscluster

一旦命令被触发,集群将启动并接受任务和计划。在

现在,考虑到调度是按照频率执行的任务,每个模式/租户都有它们,这是我想要实现的。这将使我能够配置不同时间的相同任务,系统将按预期工作。在

如何使用它

为了允许添加具有数据库模式意识的任务或计划,包中包含使其无缝的实用程序。在

from django_tenant_schemas_q.utils import QUtilities行添加到要添加taskschedule的行

要添加异步任务,可以使用

QUtilities.add_async_task(func_name_as_string, *args, **kwargs)

您可以添加sync=True,以同步运行任务。在

要创建新计划,可以使用

^{pr2}$

得到一个单一任务的结果

QUtilities.get_result(task_id, wait=0, cached=Conf.CACHED)

得到一组结果

QUtilities.get_result_group(group_id, failures=False, wait=0, count=None, cached=Conf.CACHED)

获取单个任务

QUtilities.fetch_task(task_id, wait=0, cached=Conf.CACHED)

获取一组任务

QUtilities.fetch_task_group(group_id, failures=True, wait=0, count=None, cached=Conf.CACHED)

获取组数

QUtilities.get_group_count(group_id, failures=False, cached=Conf.CACHED)

删除一组任务

QUtilities.delete_task_group(group_id, tasks=False, cached=Conf.CACHED)

从缓存中删除任务

QUtilities.delete_task_from_cache(task_id, broker=None)

获取队列的大小

 QUtilities.get_queue_size(broker=None)

使用Iter添加多个异步任务

QUtilities.add_async_tasks_from_iter(func, args_iter, **kwargs)

为此,请使用来自django_tenant_schemas_q.custom模块的Iter。在

使用链创建任务链

QUtilities.create_async_tasks_chain(chain, group=None, cached=Conf.CACHED, sync=Conf.SYNC, broker=None)

为此,请使用来自django_tenant_schemas_q.custom模块的Chain。在

测试项目

存储库中有一个测试django项目。在

  • 克隆存储库
  • 运行docker-compose -f test-compose.yml build
  • 运行docker-compose -f test-compose.yml up -d
  • 运行docker-compose -f test-compose.yml run backend python manage.py setupdata
  • 运行docker-compose -f test-compose.yml run backend python manage.py test --keepdb

这两个出色的包完全归功于Django-Q的作者https://github.com/Koed00和Django租户模式的https://github.com/bernardopires。在

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

推荐PyPI第三方库


热门话题
java使用Jackson解析非同构JSON对象数组   java为什么'Stream<T>::<A>toArray(IntFunction<A[]>)`接受没有绑定的类型参数A?   java在JavaFX2.0中获取给定布局中的节点大小?   java双链接列表创建节点   java使用HashMap添加、删除和查找   java中push_back(C++)的等效方法是什么?   java在Jetty中运行servlet时获得HTTP 500   用java显示包含图像和文本的页面的最简单文档格式   swing从选项卡窗格Java中的不同选项卡访问数据   字符串Java帮助检查登录类使用。CSV文件   java Struts 1.2.9动作链接   包含max元素的java列表   currentNode上的jcr Java空检查   在Android中使用OpenNLP的POSTaggerMe时出现java NullPointerException   java Logback只将消息记录到syslog一次   如何用Java编写构造函数的API文档   java从gallery中获取所有图像并存储在阵列中   java Maven:将外部jar文件夹添加到类路径