【发布时间】:2016-01-01 00:16:33
【问题描述】:
我编写了一个视图,它可以解密 GPG 加密文件并将其作为纯文本返回。这通常工作正常。问题是,如果文件为空或包含无效的 GPG 数据,gnupg 会返回空结果而不是抛出异常。
我需要能够在 decrypt_file 中执行类似的操作,以检查解密是否失败并引发错误:
if data.ok:
return str(data)
else:
raise APIException(data.status)
如果我这样做,我会在 Django 调试输出中看到 APIException,但它不会转换为对客户端的 500 响应。相反,客户端会收到 200 响应,但正文为空。我可以在我的 get 方法中引发 APIException,它会发送 500 响应,但我无法访问 gnupg 错误消息。
这是我的观点的一个非常简化的版本:
from rest_framework.views import APIView
from django.http import FileResponse
from django.core import files
from gnupg import GPG
class FileDownload(APIView):
def decrypt_file(self, file):
gpg = GPG()
data = gpg.decrypt(file.read())
return data
def get(self, request, id, format=None):
f = open('/tmp/foo', 'rb')
file = files.File(f)
return FileResponse(self.decrypt_file(file))
我已经阅读了有关 DRF 异常处理 here 的文档,但它似乎并没有为这个问题提供解决方案。一般来说,我对 Django 和 python 还很陌生,所以我完全有可能遗漏了一些明显的东西。有用的建议将不胜感激。谢谢。
【问题讨论】:
标签: python django python-2.7 exception-handling django-rest-framework