Могу ли я использовать библиотеку запросов в задаче Celery?

У меня есть приложение Django, в котором есть push-уведомления для пользователей. Пользователи идентифицируются на основе JWT-токена, имена пользователей или пароли не используются. У меня есть модель для сохранения события в базе данных, а также маршрут для отправки уведомления пользователю. Я использую Celery для проверки событий из базы данных каждые n минут и теперь мне нужно построить логику для отправки события пользователю, основываясь, например, на значении временной метки события. Я создал задачу для tasks.py для проверки событий:

@shared_task
def get_events():
    from .models import User, Notification
    users = User.objects.all()

    for user in users:
        events = Notification.objects.filter(id=user.id)

        if len(events) > 0:
            for event in events:
                api_call(user.id)

Это только скелет, так как я пытаюсь найти правильный способ сделать это. Моя основная проблема на данный момент заключается в том, что я могу получить всех пользователей и все события, но я не знаю, как использовать библиотеку requests для выполнения запроса к конечной точке, которая у меня есть для отправки уведомлений. Или, может быть, более важный вопрос: правильно ли я вообще это делаю? Есть ли какой-то лучший способ проверки событий в базе данных и отправки уведомлений пользователям? В views.py я могу аутентифицировать пользователей из запроса, но я понятия не имею, возможно ли это в моем tasks.py файле в задачах Celery?

Вот api_call -функция, которую я использую в данный момент. На данный момент я пытаюсь получить токен аутентификации для пользователя:

def api_call(id):
    url = 'http://localhost:8000/token/'
    data = {
        "id": id
    }

    jsonObject = json.dumps(data)
    try:
        requests.post(url, json=jsonObject)
    except Exception as e:
        print(e)

Это дает мне ошибку:

WARNING/ForkPoolWorker-8] HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /token/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f66701c9b80>: Failed to establish a new connection: [Errno 111] Connection refused')) 
Вернуться на верх