django-rest-framework - 出错时返回不同的 Content-Type 响应
问题描述
给定一个带有一个渲染器的端点:
class PNGRenderer(BaseRenderer):
media_type = 'image/png'
format = 'png'
def render(self, data, media_type=None, renderer_context=None):
return data
@renderer_classes((PNGRenderer, ))
def some_endpoint(request, format=None):
filename = 'foo.png'
if not os.path.exists(filename):
raise NotFound("File not found")
else:
with open(filename, 'rb') as f:
data = f.read()
return response(data)
application/json
如果foo.png
找不到,我想退货。显然,在现实生活中filename
不是不断地而是动态的。"foo.png"
即使向端点提供了 format='png' ,我如何才能返回在响应Content-Type
中正确设置的json 。application/json
解决方案
在写问题时,我找到了更改渲染器的答案:request.accepted_renderer = JSONRenderer()
.
尤其是:
@renderer_classes((PNGRenderer, ))
def some_endpoint(request, format=None):
filename = 'foo.png'
if not os.path.exists(filename):
request.accepted_renderer = JSONRenderer()
raise NotFound("File not found")
else:
with open(filename, 'rb') as f:
data = f.read()
return response(data)
我不确定这是否是处理binary Content-Type
异常的正确方法。
推荐阅读
- regex - 如何在 lua 正则表达式中匹配此模式,以便它可以捕获字符串中的内容
- javascript - 使用 JavaScript 的基尔霍夫电流定律
- laravel - 试图通过一对多关系在laravel中获取非对象的属性“部门”
- python - 将多个数组与 numpy 数组相交的最佳方法是什么?
- riscv - RISC-V 中断,设置 MTIMECMP
- objective-c - TCP 套接字连接打印空白
- java - Spring OAuth2 授权:访问被拒绝
- rest - 使用 JWT 在多个设备上强制用户注销
- java - Mandelbrot 集:在更深的缩放中出现条纹 (>1E14) (Java)
- node.js - Mongoose model.create() 响应为空或不响应