Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как сделать редирект после выполнения task celery? [RSS Feed]

#1 Май 12, 2013 13:32:43

delfenes
Зарегистрирован: 2012-08-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать редирект после выполнения task celery?

Задача давать доступ пользователю контенту на 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…

У пользователя ничего не происходит. Что еще нужно сделать?

Офлайн

#2 Май 13, 2013 13:07:21

Sergei
От:
Зарегистрирован: 2011-10-04
Сообщения: 29
Репутация: +  4  -
Профиль   Отправить e-mail  

Как сделать редирект после выполнения task celery?

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




Офлайн

#3 Май 17, 2013 07:08:54

delfenes
Зарегистрирован: 2012-08-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать редирект после выполнения task celery?

Спасибо! Задачу решила!

Офлайн

#4 Май 28, 2013 14:10:47

Doberman26rus
От: Ставрополь
Зарегистрирован: 2009-03-16
Сообщения: 128
Репутация: +  1  -
Профиль   Отправить e-mail  

Как сделать редирект после выполнения task celery?

для данной задачи используй стандартные сессии, не стреляй из базуки по воробьям.
а там уже или ajax или просто напиши декоратор для вьюх, к которым ты хочешь ограничить доступ, либо мидлевары задействуй.



подпись

Офлайн

  • Начало
  • » Django
  • » Как сделать редирект после выполнения task celery?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version