You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.2 KiB
76 lines
2.2 KiB
1 month ago
|
from flask import Flask, render_template, request
|
||
|
from PIL import Image
|
||
|
import pyzbar.pyzbar as pyzbar
|
||
|
import time
|
||
|
import sqlite3
|
||
|
import os
|
||
|
|
||
|
SQLITE_DB = "qr_results1.db3"
|
||
|
FLUSH_TABLE = True
|
||
|
|
||
|
app = Flask(__name__)
|
||
|
|
||
|
global sDB
|
||
|
|
||
|
class Sqlite_db:
|
||
|
def __init__(self) -> None:
|
||
|
self.conn = conn = sqlite3.connect(SQLITE_DB, check_same_thread=False)
|
||
|
self.cur = conn.cursor()
|
||
|
|
||
|
def create_table(self, table_name="QR_result"):
|
||
|
self.cur.execute(f"DROP TABLE IF EXISTS {table_name}")
|
||
|
self.cur.execute(f'''create table {table_name}(\
|
||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,\
|
||
|
content varchar(100) not null,\
|
||
|
parse_time varchar(100) not null);''')
|
||
|
self.conn.commit()
|
||
|
print(f"[*]create table {table_name}")
|
||
|
|
||
|
def update_data(self, query):
|
||
|
self.cur.execute(query)
|
||
|
self.conn.commit()
|
||
|
print(f"[*]executed: {query}")
|
||
|
|
||
|
def query_data(self, query):
|
||
|
self.cur.execute(query)
|
||
|
return self.cur.fetchall()
|
||
|
|
||
|
def exit(self):
|
||
|
self.conn.close()
|
||
|
|
||
|
@app.route('/')
|
||
|
def hello_world():
|
||
|
return 'Hello World'
|
||
|
|
||
|
@app.route('/qr', methods=['POST'])
|
||
|
def parse_qr():
|
||
|
file = request.files['qr_pic']#file.filename
|
||
|
img = Image.open(file)
|
||
|
barcodes = pyzbar.decode(img)
|
||
|
if len(barcodes):
|
||
|
result = barcodes[0].data.decode("utf-8")
|
||
|
else:
|
||
|
result = "Null"
|
||
|
cur_time = time.strftime("%Y-%m-%d %H-%M:%S", time.localtime(time.time()))
|
||
|
query = f"insert into QR_result (content, parse_time) values ('{result}', '{cur_time}')"
|
||
|
sDB.update_data(query)
|
||
|
return result
|
||
|
|
||
|
@app.route("/match", methods=['POST'])
|
||
|
def list_results():
|
||
|
pattern = request.form.get('pattern')
|
||
|
query = f"select content, parse_time from QR_result where content like '%{pattern}%'"
|
||
|
results = sDB.query_data(query)
|
||
|
page_content ="<table><thead><tr><th>QR Content</th><th>Parse Time</th></tr></thead><tbody>"
|
||
|
for r in results:
|
||
|
page_content += f"<tr><td>{r[0]}</td><td>{r[1]}</td></tr>"
|
||
|
page_content += "</tbody></table>"
|
||
|
return page_content
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
sDB = Sqlite_db()
|
||
|
if os.path.isfile(SQLITE_DB) and FLUSH_TABLE:
|
||
|
sDB.create_table()
|
||
|
# app.config['DEBUG'] = True
|
||
|
app.run()
|
||
|
sDB.exit()
|