视图渲染后如何执行操作?(Django)
我想在渲染完视图之后做一些事情,使用的是
return render_to_response()
信号是唯一的方法吗?我需要写一个自定义信号,还是说request_finished已经提供了足够的信息?基本上,我需要知道渲染了哪个页面,然后根据这个页面做一些操作。
谢谢。
评论更新:我不想拖慢页面的渲染,所以我想先渲染页面,然后再执行这个操作。
7 个回答
5
如果你有一个需要很长时间才能完成的任务,你有两个简单的选择。
在发送响应页面之前,先启动一个子进程。
创建一个“后台服务守护进程”,然后把工作请求交给它。
这些都不在Django框架内。你可以使用subprocess或者其他一些进程间通信的方法来和另一个进程进行交流。
12
你可以创建一个单独的线程,让它去执行某个操作。
t = threading.Thread(target=do_my_action, args=[my_argument])
# We want the program to wait on this thread before shutting down.
t.setDaemon(False)
t.start()
这样一来,'do_my_action(my_argument)' 就会在另一个线程中运行,这个线程会继续工作,即使你已经发送了Django的响应并结束了最初的线程。例如,它可以在不影响响应速度的情况下发送一封邮件。