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测试接口: