Найти - Пользователи
Полная версия: Как сделать редирект после выполнения task celery?
Начало » Django » Как сделать редирект после выполнения task celery?
1
delfenes
Задача давать доступ пользователю контенту на 1 час. Через 1 час делать редирект на страницу с личным кабинетом.
Через 1 час выполняется отложенный task.
Каким образом делать редирект?

@task(name='access', ignore_results=True, routing_key='default')
def access():
    return redirect('homepage')

Celery сообщает что редирект произошел:
Task access succeeded in 0.185846090317s: <django.http.HttpResponseRedirect object at…

У пользователя ничего не происходит. Что еще нужно сделать?
Sergei
Вы как-то все в кучу смешали - request-response и асинхронные задачи, это разные вещи, исполняются в разных контекстах. Ваш возврат редиректа должен исполняться в ответ на запрос клиента (действия пользователя, работа скрипта на клиенте - что угодно может быть инициатором), и это синхронный процесс на сервере.
Вы можете до определенной степени контролировать, когда и как исполнится код таска, но это все же асинхронный процесс (технически да, можно сказать таск.get() и превратить таск в синхронный - но в этом смысла нет, нахрен тогда celery) и никак не связан с request-response.
Навскидку, задача “Через 1 час делать редирект” примерно так делается:
- есть хранилище со статусом пользователя (любое - новое, имеющееся)
- в момент 0 (от которого идет отсчет “через час”) фиксируем пользователя и момент
- либо сразу запускаем таск с отложенным временем, либо это будет уже работающий Periodic
- этот таск, в момент “через час” меняет статус пользователя на “редиректить его при запросе”
- при запросе (ваш вьюс, а не таск!) проверять статус - если нужно редиректить, то редиректить. Если запрос пришел до истечения времени - все как обычно.
удачи,


delfenes
Спасибо! Задачу решила!
Doberman26rus
для данной задачи используй стандартные сессии, не стреляй из базуки по воробьям.
а там уже или ajax или просто напиши декоратор для вьюх, к которым ты хочешь ограничить доступ, либо мидлевары задействуй.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB