首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django rest框架-返回图像作为响应

Django rest框架-返回图像作为响应
EN

Stack Overflow用户
提问于 2018-05-29 18:50:28
回答 4查看 6K关注 0票数 0

我正在调用django rest framework get api来创建条形码。当我尝试将它保存为图像时,它工作得很好。

代码语言:javascript
复制
@api_view(['GET'])
def mybarcode(request):
    from elaphe import barcode

        code = barcode('datamatrix', "sampletext",
                       encoding='utf-8', scale=2,
                       options=dict(columns=24, rows=24),
                       margin=2, data_mode='50bits')
        code.save("mybarcode.jpg")
        return Response({'status': True})

当我将此接口调用为"http://127.0.0.1:9999/api/v1/testbarcode“时,它工作得很好。将创建一个名为"mybarcode.jpg“的镜像,接口返回其状态为True。

但我希望将图像作为此api调用的结果返回。因为我必须将它包含在一个图像标签中。

代码语言:javascript
复制
<img src='http://127.0.0.1:9999/api/v1/testbarcode' />

有没有办法做到这一点?

EN

回答 4

Stack Overflow用户

发布于 2018-05-29 20:17:57

应该避免在Django视图中返回图像/文件。Web服务器NGINX/Apache擅长处理这些问题。

将镜像保存在存储中,如本地磁盘、亚马逊S3或其他云存储。然后根据图像的存储位置渲染图像。

在本地存储的情况下,它可以使用web服务器交付。存储在亚马逊云服务S3中的图像可以通过亚马逊云服务CDN Cloudfront提供。

票数 2
EN

Stack Overflow用户

发布于 2020-08-24 22:24:29

我用它返回了一个成员的二维码:

代码语言:javascript
复制
@staticmethod
def qr_code(request, member_id):
    m = Member.objects.get(id=member_id)
    response = HttpResponse(m.generate_qrcode())
    response['Content-Type'] = "image/png"
    response['Cache-Control'] = "max-age=0"
    return response

在Member类上调用以下代码:

代码语言:javascript
复制
def generate_qrcode(self):
    qr = qrcode.QRCode(
        version=2,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=4,
        border=0,
    )
    qr.add_data(self.formatted_id())
    qr.make(fit=True)

    img = qr.make_image()

    buffer = BytesIO()
    img.save(buffer)

    return buffer.getbuffer()

这种方式不会接触到磁盘,尽管我认为它会以更高的并发性占用内存。

票数 2
EN

Stack Overflow用户

发布于 2018-05-29 19:54:40

用于将图像转换为base64

代码语言:javascript
复制
import base64
def(yourimagefile):
     with open(yourimagefile, "rb") as image_file:
         base64string = base64.b64encode(image_file.read())
         return base64string

在创建图像后挂接此模块,并更改用于显示base64内容的html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50582519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档