我想在使用渲染视图后做一些事情
return render_to_response()
Run Code Online (Sandbox Code Playgroud)
信号是唯一的方法吗?我是否需要编写自定义信号或request_finished给我足够的信息?基本上我需要知道呈现了什么页面,然后做出响应的动作.
谢谢.
来自评论的更新:我不想阻止页面的渲染,所以我想首先渲染页面然后执行操作.
Ale*_*erg 11
您生成一个单独的线程并让它执行操作.
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()
Run Code Online (Sandbox Code Playgroud)
这将导致'do_my_action(my_argument)'在第二个线程中执行,即使在发送Django响应并终止初始线程之后,该线程仍将继续工作.例如,它可以发送电子邮件而不会延迟响应.
执行此操作的常见方法是使用消息队列。您将消息放入队列中,工作线程(或进程等)会使用该队列并在视图完成后执行工作。
Google App Engine 有任务队列 API http://code.google.com/appengine/docs/python/taskqueue/,amazon 有简单队列服务http://aws.amazon.com/sqs/。
快速搜索并没有发现任何看起来像公认标准的 django 可插入项。
模拟功能的一种快速而肮脏的方法是将“消息”放入数据库表中,并让 cron 作业定期检查该表以执行工作。
Django 的 HttpResponse 对象在其构造函数中接受一个迭代器:
http://docs.djangoproject.com/en/dev/ref/request-response/#passing-iterators
所以你可以这样做:
def myiter():
yield "my content"
enqueue_some_task()
return
def myview(request):
return HttpResponse(myiter())
Run Code Online (Sandbox Code Playgroud)
迭代器的正常使用是发送大数据而不将其全部读入内存。例如,从文件中读取块并适当地产生。我从未以这种方式使用过它,但它似乎应该有效。
Alb*_*oPL -1
在渲染响应中,您传递要显示的 html 页面。另一个页面需要发送一个帖子(通过 Javascript 或其他方式)来触发视图中的正确函数,然后该视图调用要显示的正确的下一页。
归档时间: |
|
查看次数: |
6847 次 |
最近记录: |