1

我有一个涵盖两种形式的 WizardView,第二个有一个 FileField。是否可以创建一个 Celery 任务来从该 FileField 上传文件?

我应该创建另一个 FILE_UPLOAD_HANDLER 吗?我在https://docs.djangoproject.com找到的有关使用向导处理文件的所有信息都是关于必须将 file_storage 添加到 WizardView 子类。

4

1 回答 1

1

实际上上传文件是一个请求,因此你需要用一个视图来处理它,然后做任何你想做的事情,包括启动一个 celery 任务来处理文件操作。这种方法的问题是,如果 celery 任务返回某些内容,则无法向客户端提供定期响应(但您可以,例如,定期从客户端 ping 一个特殊的 url 或使用 socket.io 来传递结果)。

有一件事不会改变 - 文件上传,无论是单独的还是在常规表单中,都是一个请求,因此您必须首先使用视图处理它,然后才能将接收到的数据传递给任务或直接处理它。

此外,文件上传处理程序处理从套接字接收数据。我想你可以创建一个在芹菜任务中工作的任务,或者更确切地说是任务,因为通过套接字发送的数据的部分性质,但据我所知,在文件上传之前(或在更好的情况是,您可以访问除文件之外的所有数据),因此将其发送到 celery 是没有意义的,特别是如果您需要创建涉及对文件进行某些操作的响应时。

于 2013-04-25T14:54:26.370 回答