Python Django REST API公开图像
我有一个django应用程序,我想公开模型图像,这样当我请求Python Django REST API公开图像,python,django,rest,django-models,django-rest-framework,Python,Django,Rest,Django Models,Django Rest Framework,我有一个django应用程序,我想公开模型图像,这样当我请求/image/school_id/400时,它将返回id为school_id的学校图像,并将其裁剪和调整为400x400 px的方框。这是我试过的 @api_view(['GET', 'POST']) def image_view(request, school_id, size): image = School.objects.get(school__pk=school_id).image resized_img
/image/school_id/400
时,它将返回id为school_id
的学校图像,并将其裁剪和调整为400x400 px的方框。这是我试过的
@api_view(['GET', 'POST'])
def image_view(request, school_id, size):
image = School.objects.get(school__pk=school_id).image
resized_img = image #Handle resizing here
return Response(resized_img, content_type='*/*')
我得到的只是一个错误,“utf8”编解码器无法解码位置0处的字节0xff:无效的起始字节
如何返回图像?
我正在使用Django rest框架
您试图返回原始图像数据,并让Django REST Framework呈现响应。由于响应不应基于所选格式而有所不同,因此应使用原始HttpResponse对象
return HttpResponse(resized_img, content_type="image/png")
请注意,content\u type
应该反映返回响应的内容类型,它应该与正在调整大小的图像的内容类型相匹配
您得到的错误是因为
呈现程序
类需要基于文本的响应,而不是图像数据。Django REST框架不会将自定义呈现器应用于HttpResponse
类,只会应用于Django REST框架Response
类。我知道这是一个相当老的问题,但我找到了解决这个问题的方法。
您可以使用from Django Rest框架通过响应返回图像。
例如:
class CustomRenderer(renderers.BaseRenderer):
media_type = 'image/png'
format = 'png'
charset = None
render_style = 'binary'
def render(self, data, media_type=None, renderer_context=None):
return data
在视图中,您必须通过以下方式调用此渲染器:
- 装饰器:@renderer\u类((CustomRenderer,)
- 渲染器类:渲染器\u类=(自定义渲染器,)
@action(methods=['get'], detail=True, renderer_classes=(CustomRenderer,))
自Django 1.8以来,还有Django.http.FileResponse