Aru*_* SS 1 python django django-views django-rest-framework
我正在调用 django Rest 框架 get api 来创建条形码。当我尝试将其另存为图像时,它工作正常。
@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})
Run Code Online (Sandbox Code Playgroud)
当我将此 API 称为“ http://127.0.0.1:9999/api/v1/testbarcode ”时,效果很好。将创建一个名为“mybarcode.jpg”的图像,并且 api 返回其状态为 True。
但我想返回图像作为此 api 调用的结果。因为我必须将其包含在图像标签中。
<img src='http://127.0.0.1:9999/api/v1/testbarcode' />
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到这一点吗?
我用它来返回会员的二维码:
@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
Run Code Online (Sandbox Code Playgroud)
在 Member 类上调用它:
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()
Run Code Online (Sandbox Code Playgroud)
这样就不会接触磁盘,尽管我认为它会在更高的并发情况下占用内存。