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 запускаться в моей задаче?