Форум сайта python.su
Задача давать доступ пользователю контенту на 1 час. Через 1 час делать редирект на страницу с личным кабинетом.
Через 1 час выполняется отложенный task.
Каким образом делать редирект?
@task(name='access', ignore_results=True, routing_key='default') def access(): return redirect('homepage')
Офлайн
Вы как-то все в кучу смешали - request-response и асинхронные задачи, это разные вещи, исполняются в разных контекстах. Ваш возврат редиректа должен исполняться в ответ на запрос клиента (действия пользователя, работа скрипта на клиенте - что угодно может быть инициатором), и это синхронный процесс на сервере.
Вы можете до определенной степени контролировать, когда и как исполнится код таска, но это все же асинхронный процесс (технически да, можно сказать таск.get() и превратить таск в синхронный - но в этом смысла нет, нахрен тогда celery) и никак не связан с request-response.
Навскидку, задача “Через 1 час делать редирект” примерно так делается:
- есть хранилище со статусом пользователя (любое - новое, имеющееся)
- в момент 0 (от которого идет отсчет “через час”) фиксируем пользователя и момент
- либо сразу запускаем таск с отложенным временем, либо это будет уже работающий Periodic
- этот таск, в момент “через час” меняет статус пользователя на “редиректить его при запросе”
- при запросе (ваш вьюс, а не таск!) проверять статус - если нужно редиректить, то редиректить. Если запрос пришел до истечения времени - все как обычно.
удачи,
Офлайн
Спасибо! Задачу решила!
Офлайн
для данной задачи используй стандартные сессии, не стреляй из базуки по воробьям.
а там уже или ajax или просто напиши декоратор для вьюх, к которым ты хочешь ограничить доступ, либо мидлевары задействуй.
Офлайн