如何在Django REST Framework API中实现可扫描二维码生成功能
可嵌入优惠内容的二维码API实现方案
前置依赖安装
- 安装二维码生成、图像处理及接口开发所需依赖:
pip install qrcode pillow django-rest-framework
核心实现代码
1. 二维码生成工具函数
import qrcode import time from io import BytesIO from django.core.files import File def generate_discount_qr(content: str): """ 传入优惠文本内容,生成二维码文件对象 """ qr = qrcode.QRCode( version=1, # 容错级别设为L,识别速度更快,适合线下扫码场景 error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(content) qr.make(fit=True) # 生成黑白二维码图片 img = qr.make_image(fill_color="black", back_color="white") # 转换为Django可识别的File对象,方便存入ImageField buffer = BytesIO() img.save(buffer, format="PNG") buffer.seek(0) file_name = f"discount_qr_{int(time.time())}.png" return File(buffer, name=file_name)
2. 接口视图实现
以下是基于Django REST Framework的接口代码,支持调用后直接返回图片格式结果:
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from .models import YourModel # 替换为你实际的模型类名 class DiscountQrGenerateAPI(APIView): def post(self, request): # 接收请求传入的优惠文本内容 discount_content = request.data.get("discount_content") if not discount_content: return Response({"error": "优惠内容不能为空"}, status=status.HTTP_400_BAD_REQUEST) # 生成二维码文件 qr_file = generate_discount_qr(discount_content) # 可选:将二维码持久化存储到数据库的qr_code字段 qr_record = YourModel.objects.create( # 补充你模型其他需要赋值的字段 qr_code=qr_file ) qr_record.save() # 直接返回PNG格式图片给调用方 response = Response(content_type="image/png") qr_file.seek(0) response.write(qr_file.read()) return response
3. 路由配置
在你的app的urls.py中添加接口路由:
from django.urls import path from .views import DiscountQrGenerateAPI urlpatterns = [ path("api/generate-discount-qr/", DiscountQrGenerateAPI.as_view(), name="generate_discount_qr"), ]
注意事项
优惠文本内容建议控制在200字符以内,避免二维码密度过高导致识别失败。如果内容过长,可以把优惠详情放在H5页面,将页面链接嵌入二维码即可。
如果不需要持久化存储二维码,可以跳过数据库写入步骤,直接返回生成的图片流,接口响应速度会更快。
内容的提问来源于stack exchange,提问作者Sushang Agnihotri
相关产品推荐
相关产品推荐

