我在Django中使用Celery将我的pdf生成放在后台,同时显示一个加载页面。
但当任务完成时(即,我的pdf生成),我想重定向到下一个视图,该视图负责发送邮件并向用户显示友好的确认消息。
我知道我可以得到task_postrun或task_success信号,但我不能从那里重定向。
我找了几个小时,但没有找到任何解决方案,有什么想法吗?
谢谢!
有两种方法:
-
询问服务器:将task_id保存在存储PDF的模型中,并创建一个ajax视图,每隔X秒检查一次任务是否完成,该视图的结果将决定它是应该重定向还是仍然等待PDF。
result = MyTask.AsyncResult(task_id) result.get()
-
实时网络:另一种方法是将pusher与pusher_client_python一起使用,当PDF生成完成时(在您的PDF创建rutine中),对pusher进行api调用,pusher将向连接的客户端(等待结果的客户端)发送通知并进行重定向,这种方法更方便,因为您不必每隔X秒询问服务器一次。您需要学习套接字范式,但它很容易实现。
希望这能有所帮助。