Задача Celery не выполняется в django
Я изучаю Django на примере django 3. Я хочу запустить асинхронную задачу с помощью celery. Я установил настройки, но задача не выполняется. Я использую rabbit mq в качестве брокера и использую windows. Вот мой код:
celery.py
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Onlineshop.settings')
app = Celery('Onlineshop')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
init.py
from .celery import app as celery_app
__all__ = ('celery_app',)
tasks.py
from celery import shared_task
from django.core.mail import send_mail
from .models import Order
@shared_task
def order_created(order_id):
"""Task to send an e-mail notification when order is successfully created."""
order = Order.objects.get(id=order_id)
subject = f'Order nr. {order.id}'
message = f'Dear {order.first_name},\n\n' \
f' You have successfully placed an order.' \
f'Your order ID is {order.id}'
mail_sent = send_mail(subject, message, 'admin@onlineshop.com', [order.email])
return mail_sent
views.py
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from .models import OrderItem
from .forms import OrderCreateForm
from cart.cart import Cart
from .tasks import order_created
# Create your views here.
@login_required
def order_create(request):
cart = Cart(request)
if request.method == 'POST':
user = request.user
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save(commit=False)
order.user = user
order.save()
for item in cart:
OrderItem.objects.create(order=order, product=item['product'], price=item['price'],
quantity=item['quantity'])
context = {
'order': order,
}
# clear the cart
cart.clear()
# launch asynchronous task
order_created.delay(order.id)
return render(request, 'order/created.html', context)
else:
form = OrderCreateForm()
context = {'cart': cart,
'form': form,
}
return render(request, 'order/create.html', context)
Вот проблема в моем представлении я вызвал функцию order_created, но задача не выполняется и в консоли нет письма. Мои настройки электронной почты верны, потому что другая электронная почта в моем приложении работает. Я использую flower для мониторинга celery и в панели flower он показывает, что задачи выполняются, но нет никакого письма. Я буду рад, если кто-нибудь сможет помочь
Хорошо, выполнив команду Rabbitmq-server restart, а также заставить celery подключиться к серверу, выполнив команду Celery -A app_name worker --loglevel=info.