Python使用qrcode生成二维码并保存到服务器,一键复制,代码从未如此简单~

该代码示例展示了如何使用Django进行设备配置的增删改查操作,包括根据条件过滤查询设备信息,创建和更新二维码图像,并存储到静态文件夹,同时处理设备信息存在的冲突情况以及删除操作。此外,还自定义了JSON编码器处理日期时间格式。
摘要由CSDN通过智能技术生成

tip:qrcode安装版本为7.4.2

以下为增删改查方法: 

# -- coding: utf-8 --**
# pip install pycryptodomex pycryptodome
# from Crypto.Cipher import AES
# from Crypto.Util.Padding import pad, unpad
import datetime
import json
import os
import time

import qrcode
from django.shortcuts import HttpResponse

from device.models import table_device_ercode


def get_device_config_list(request):
    if request.method == 'GET':
        id = request.GET.get('id')
        # 设备详情
        deviceMsg = request.GET.get('deviceMsg')
        pagenumber = request.GET.get('page', 1)
        limitnumber = request.GET.get('limit', 10)
        allFilter = table_device_ercode.objects
        if id != '':
            allFilter = allFilter.filter(id=id)
        if deviceMsg != '':
            allFilter = allFilter.filter(device_msg__icontains=deviceMsg)
        data = allFilter.filter(is_delete='1').values().order_by('-id')
        data_dict_list = list(data)
        s = (int(pagenumber) - 1) * int(limitnumber)
        t = int(limitnumber) * int(pagenumber)
        # 自定义分页s开始,t结束,列表分片
        l1 = data_dict_list[s:t]
        check_sms_msg = {"status_code": 200, "msg": "查询成功", "count": len(data_dict_list), "data": l1}
    else:
        check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '调用的方法不对,不支持的方法!'}
    return HttpResponse(json.dumps(check_sms_msg, cls=DateEncoder), content_type="application/json")


def add_device_config(request):
    if request.method == 'POST':
        print('创建设备配置')
        # 设备详情
        deviceMsg = request.POST.get('deviceMsg')
        b = table_device_ercode.objects
        if deviceMsg != '':
            b = b.filter(device_msg=deviceMsg)
            list = b.values()
            if list.exists():
                check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '设备信息已存在!'}
            else:
                try:
                    # 生成二维码图片
                    qr = qrcode.QRCode(version=1, box_size=10, border=5)
                    qr.add_data(deviceMsg)
                    qr.make(fit=True)
                    img = qr.make_image(fill_color="black", back_color="white")

                    # 保存为png文件
                    timestamp = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
                    milliseconds = int((time.time() - int(time.time())) * 1000)
                    filename = f"static/images/deviceErcode/{timestamp}{milliseconds:03d}.png"
                    if not os.path.exists("static/images/deviceErcode"):
                        os.makedirs("static/images/deviceErcode")
                    img.save(filename)
                    # 生成数据
                    table_device_ercode.objects.create(
                        device_msg=deviceMsg,
                        ercode_url='https://123.com/' + filename,
                        create_time=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())),
                        is_delete='1')
                    check_sms_msg = {'status_code': 200, 'code': 200, 'msg': '添加成功!'}
                except Exception as e:
                    if os.path.exists(filename):
                        os.remove(filename)
                    check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '添加失败!'}
                    print(e)
        else:
            check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '设备信息不能为空!'}
    else:
        check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '调用的方法不对,不支持的方法!'}

    return HttpResponse(json.dumps(check_sms_msg, cls=DateEncoder), content_type="application/json")


def edit_device_config(request):
    if request.method == 'POST':
        print('修改设备配置')
        id = request.POST.get('id')
        # 设备详情
        deviceMsg = request.POST.get('deviceMsg')
        b = table_device_ercode.objects
        if deviceMsg != '':
            b = b.filter(device_msg=deviceMsg).exclude(id=id)
            list = b.values()
            if list.exists():
                check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '设备信息已存在!'}
            else:
                try:
                    # 删除原二维码图片
                    oldUrl = table_device_ercode.objects.get(id=id).ercode_url.split("https://123.com/")[1]
                    if os.path.exists(oldUrl):
                        os.remove(oldUrl)
                    # 生成二维码图片
                    qr = qrcode.QRCode(version=1, box_size=10, border=5)
                    qr.add_data(deviceMsg)
                    qr.make(fit=True)
                    img = qr.make_image(fill_color="black", back_color="white")
                    # 保存为png文件
                    timestamp = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
                    milliseconds = int((time.time() - int(time.time())) * 1000)
                    filename = f"static/images/deviceErcode/{timestamp}{milliseconds:03d}.png"
                    if not os.path.exists("static/images/deviceErcode"):
                        os.makedirs("static/images/deviceErcode")
                    img.save(filename)
                    # 更新数据
                    table_device_ercode.objects.update(
                        device_msg=deviceMsg,
                        ercode_url='https://123.com/' + filename,
                        update_time=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
                    check_sms_msg = {'status_code': 200, 'code': 200, 'msg': '更新成功!'}
                except Exception as e:
                    if os.path.exists(filename):
                        os.remove(filename)
                    check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '更新失败!'}
                    print(e)
        else:
            check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '设备信息不能为空!'}
    else:
        check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '调用的方法不对,不支持的方法!'}

    return HttpResponse(json.dumps(check_sms_msg, cls=DateEncoder), content_type="application/json")


def del_device_config(request):
    if request.method == 'POST':
        print('删除设备配置')
        # 接口标识,需要全局唯一.
        id = request.POST.get('id')
        # 删除二维码
        # c = table_device_ercode.objects.filter(id=id).values().first()
        # if c != None:
        #     os.remove(c['ercode_url'].split("https://123.com/")[1])
        # table_device_ercode.objects.filter(id=id).delete()
        # 更新数据
        table_device_ercode.objects.filter(id=id).update(
            is_delete='0',
            update_time=time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
        check_sms_msg = {'status_code': 200, 'code': 200, 'msg': '删除成功!'}
    else:
        print('调用的方法不对,不支持的方法!')
        check_sms_msg = {'status_code': 500, 'code': 500, 'msg': '调用的方法不对,不支持的方法!'}
    return HttpResponse(json.dumps(check_sms_msg, cls=DateEncoder), content_type="application/json")


# 如果传入的对象是datetime.datetime类型,我们将使用strftime方法将其转换为字符串类型,格式为"%Y-%m-%d %H:%M:%S"。否则,我们将调用json.JSONEncoder类的default方法来处理该对象。这个类可以用来将datetime类型的对象转换为字符串类型,以便在JSON序列化过程中使用

class DateEncoder(json.JSONEncoder):
    # 这个方法用来转换datatime类型为用户类型
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime("%Y-%m-%d %H:%M:%S")
        else:
            return json.JSONEncoder.default(self, obj)

postman测试接口:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值