Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django芹菜目录结构和布局_Python_Django_Rabbitmq_Celery_Django Celery - Fatal编程技术网

Python Django芹菜目录结构和布局

Python Django芹菜目录结构和布局,python,django,rabbitmq,celery,django-celery,Python,Django,Rabbitmq,Celery,Django Celery,我有一个django项目,它使用以下目录结构 project/ account/ models.py views.py blog/ models.py views.py mediakit/ models.py views.py reports/ celery.py <-- new models.py tasks.py <-- new views.p

我有一个django项目,它使用以下目录结构

project/
  account/
      models.py
      views.py 
  blog/
      models.py
      views.py
  mediakit/
      models.py
      views.py
  reports/
      celery.py <-- new
      models.py
      tasks.py <-- new
      views.py
  settings/
      __init__.py <-- project settings file
  system/
      cron/
      mongodb/
      redis/
  manage.py
我的一些应用程序是跨项目共享的。例如,报告可能用于4个不同的项目,因此 我可以看到tasks.py应该如何存在于reports应用程序中,以便在将其添加到新项目时 任务随之而来。我不太明白的是,为什么芹菜.py需要在reports应用程序中使用 也当我向account应用程序添加一些任务时,我基本上是在构建相同的芹菜.py文件 将“报告”替换为“帐户”。我不应该有一个芹菜档案,生活在同一水平
作为manage.py?如有任何帮助或建议,将不胜感激

您只需要一个芹菜文件。只要
\uuu init\uuu
文件位于同一文件夹中并具有所需的调用,建议您将其放置在主项目目录或设置所在的位置。

芹菜应用程序文件应位于项目的核心目录中,以及您发布的文档中显示的设置和所有其他内容

要定义可移植任务,将它们放在正在使用它们的应用程序中是有意义的,正如您所指出的,在您的案例中是reports应用程序

其思想是,您的任务文件由项目中定义的任何芹菜应用程序注册,而您的django应用程序不需要知道哪个芹菜应用程序正在注册任务。您可以通过使用decorator而不是
app.task
来实现这一点

总结如下:

project/
  project/
      settings.py
      celery.py <- new, shown in the docs, also add __init__.py
      urls.py
  account/
      models.py
      views.py 
  blog/
      models.py
      views.py
  mediakit/
      models.py
      tasks.py <-- tasks for the me
      views.py
  reports/
      models.py
      tasks.py <-- tasks for the reports app
      views.py
  manage.py

希望这能有所帮助。

您能详细介绍一下吗?我试着将它添加到/project/_init__.py,但最终出现了各种导入错误。芹菜教程说,把它放在/projects/reports/_init__uu;.py()上,可能是你的目录结构有问题,因为我在多个应用程序中使用它,芹菜.py在我的“核心”应用程序中,它也包含我的设置。manage.py/settings文件在哪里?已更新帖子。我的设置在/settings/_init__.py中。另请注意,您将celery.py放在二级项目文件夹中,并将其称为“celery-项目工作人员-l信息”,其中项目指的是该二级文件夹。接受@qwattash答案,因为它让我知道了我要去的地方。但这真的是标准吗?我有每个项目的系统和设置“应用程序”,芹菜.py是否属于其中之一?似乎这只是一个偏好的问题,但如果有一个明确的标准,我愿意遵循它。
project/
  project/
      settings.py
      celery.py <- new, shown in the docs, also add __init__.py
      urls.py
  account/
      models.py
      views.py 
  blog/
      models.py
      views.py
  mediakit/
      models.py
      tasks.py <-- tasks for the me
      views.py
  reports/
      models.py
      tasks.py <-- tasks for the reports app
      views.py
  manage.py
from celery import shared_task

@shared_task
def my_add_task(a, b):
    return a + b