业务需求:集成华视电子身份证读取sdk,通过requests库进行网络请求并解析,然后将读取到的身份证信息采用sqlite3持久化到本地
![在这里插入图片描述](https://img-blog.csdnimg.cn/934f66ff045348f8826d2e68b3e02aac.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg0MTkzOA==,size_16,color_FFFFFF,t_70)
直接上代码,里面有注释
# -*- coding: UTF-8 -*-
from tkinter import *
import requests
# import tkinter.messagebox as msgbox
import sqlite3
# 连接设备
def linkRequest():
analysisJson('http://127.0.0.1:19196/OpenDevice')
# 读取身份证
def readRequest():
jsonData = analysisJson('http://127.0.0.1:19196/readcard')
certNumber = jsonData.get("certNumber")
partyName = jsonData.get("partyName")
if partyName != '' and certNumber != '':
info = partyName + ',' + certNumber
strv2.set(info)
listBox.insert(END, info)
sqlSelect = 'select * from t_user where certNumber=?'
sqlInsert = 'insert into t_user (partyName,certNumber) values (?,?)'
sqlSelectAll = 'select * from t_user'
try:
cursor.execute(sqlSelect, (certNumber,))
if cursor.fetchone() is None:
cursor.execute(sqlInsert, (partyName, certNumber))
conn.commit()
print('插入成功')
else:
print('数据已存在')
except Exception as e:
conn.rollback()
print(e)
print('插入失败')
finally:
cursor.execute(sqlSelectAll)
print(cursor.fetchall())
# cursor.close()
# conn.close()
else:
strv2.set('身份信息为空')
# 断开设备
def stopRequest():
analysisJson('http://127.0.0.1:19196/CloseDevice')
# 解析json
def analysisJson(url):
jsonData = requests.get(url).json()
print(jsonData)
errorMsg = jsonData.get("errorMsg")
strv1.set(errorMsg)
return jsonData
# 数据库
db_name = 'person.db'
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
# 测试需要删除已存在的表
sqlDeleteTable = 'drop table IF EXISTS t_user'
cursor.execute(sqlDeleteTable)
# 如果表名不存在,建表
sql = 'CREATE TABLE IF NOT EXISTS t_user (id INTEGER PRIMARY KEY AUTOINCREMENT, partyName varchar(30) NOT ' \
'NULL, certNumber varchar(30) NOT NULL) '
cursor.execute(sql)
# tk-gui
root = Tk()
root.title('咽式子v1.0')
# root.geometry('400x300')
root.minsize(400, 300)
# 权重,随着整个tk页面的大小,里面的内容也随之改变,居中
root.columnconfigure(1, weight=1)
# 内容框架,方便使用网格布局
f2 = Frame(root)
strv1 = StringVar()
strv2 = StringVar()
strv1.set('执行结果将在这里显示')
strv2.set('身份证信息将在这里显示')
# 三个按钮组件
btnLink = Button(f2, text='连接设备', command=linkRequest).grid(row=1, column=1, padx=10)
btnRead = Button(f2, text='读取身份证', command=readRequest).grid(row=1, column=2, padx=10)
btnStop = Button(f2, text='断开设备', command=stopRequest).grid(row=1, column=3, padx=10)
# 文本组件
contentLabel = Label(f2, textvariable=strv1).grid(row=2, column=2, pady=10)
contentLabel2 = Label(f2, textvariable=strv2).grid(row=3, column=2)
# list列表组件
listBox = Listbox(f2)
listBox.grid(row=4, column=2, sticky=W+E)
f2.grid(row=1, column=1, pady=10)
# 开启页面循环刷新
root.mainloop()