Django文件上传处理程序错误

时间:2009-08-05 15:16:09

标签: django upload

在Django中,我希望在收到后立即停止任何未在指定分机中结束的文件上传。为此,我定义了一个自定义的上传处理程序,并将new_file写成如下所示:

def new_file(self, field_name, file_name, content_type, content_length, charset=None):
    basename, extension = os.path.splitext(file_name)
    if extension != ".txt":
        raise StopUpload(True) # Error: Only .txt files are accepted

这适用于停止上传,但它也会清除request.FILES。现在,当我的视图收到请求时,它无法判断上传处理程序是否导致文件丢失,我无法向用户显示有用的消息。

有没有办法将消息从上传处理程序传播到相应的视图,以便我可以向用户显示错误?我尝试过使用请求对象,但它是不可变的。

1 个答案:

答案 0 :(得分:4)

我找到了一个原因,为什么我无法让它工作和解决方案 同样。

似乎Django对request.FILES使用延迟评估 确定何时调用上传处理程序。因此,上传 只有当您尝试访问时才会引发处理程序 request.FILES。另外,我正在使用的请求对象 (在我的例子中是WSGIRequest)已经创建了GET和POST不可变字典, 所以我们不能通过那里传递信息。但是,META仍然存在 可以添加信息。

我的组合解决方案在视图中有“request.FILES”行 处理上传,强制上传处理程序开始。当。。。的时候 在new_files中捕获错误,我将self.request.META ['error']设置为 错误消息并提出StopUpload,它将我们推回到 没有文件的视图。最后,我检查了request.META ['error'] 查看并在出现问题时显示该消息。

我希望这有帮助!