AttributeError: объект 'name_Funcition/task' не имеет атрибута 'GET' - Django, Celery + RabbitMQ

Я начинаю использовать Celery+RabbitMQ для использования асинхронных функций в моей системе Django и сталкиваюсь с некоторыми проблемами.

Как я понимаю, при использовании Celery+RabbitMQ, функция, которую я вставляю в файл tasks.py, будет выполняться "вне" моей системы Django, и я считаю, что не смогу правильно использовать/разделить все это.

Я организовал свой проект следующим образом:

settings.py

CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

project/init.py

from .celery import app as celery_app
__all__ = ('celery_app',)

projetec/celery.py

from __future__ import absolute_import
from django.conf import settings
import os
from celery import Celery

# Defina o módulo de configurações padrão do Django para o programa 'celery'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery(
    'proj',
    broker='amqp://guest:guest@localhost:5672//',
    backend='rpc://',
    include=['app.tasks']
    )

# Startando o app config
if __name__ == '__main__':
    app.start()

# Usar uma string aqui significa que o trabalhador não precisa serializar
# o objeto de configuração para processos filhos
# - namespace='CELERY' significa todas as chaves de configuração relacionadas ao celery
#   deve ter um prefixo `CELERY_`.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django apps.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

app/tasks.py

@shared_task(
    bind=True, # Chama funções do celery
    max_retry=3, # Maximo de tentativas de execução
    default_retry_delay=20, # Tempo entre as tentativas em segundos
    autoretry_for=(TypeError, Exception), # Auto retry caso algum erro na tupla aconteça
    )
def gerar_pdf(request):

print('Buscando o dashboard pelo uuid')
    dashUUID = request.GET.get('uuid')
    dashObject = Dashboard.objects.get(uuid=dashUUID)
    print('UUID = ', dashUUID)
    
    In this step I'm trying to run a script that downloads a report in PDF format and sends it to my customers' email
    ...

views.py

def DashboardViewPdf(request):

gerar_pdf.delay()

return render(request, template_name, context)

Для выполнения этой задачи с помощью Django я добавил во фронтенд кнопку, которая вызывает функцию "DashboardViewPdf". Но при выполнении она возвращает следующую ошибку:

AttributeError: 'gerar_pdf' object has no attribute 'GET'

Как я могу заставить атрибуты django запускаться в моей задаче?

Вернуться на верх