You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:24:03