bug1
在保存前端接受的压缩包时,我保存在了flask的static文件夹下,这样就出现了一个保存好后又重新回到保存行的bug,但是保存目录换成了D盘随意新建的一个文件夹,就能够解决
@app.route('/tjsjs', methods=['GET', 'POST'])
def do_tjsjs():
if request.method == 'GET':
return render_template('批量阅卷.html')
else:
zf = request.files.get('file')
number = request.form.get('number')
number_i = int(number) # 第几次试卷
# 存储路径
path1 = 'D:\\python_projects\\b毕设\\static\\stu_img\\bank' + number
# 存储压缩包
path_z = path.join('D:\\python_projects\\b毕设\\static\\stu_img', zf.filename)
path2 = 'D:\\Temp\\bishe\\number1\\students.zip'
zf.save(path2)
# 查询正确答案
sql = 'select * from answer where a_time=%s'
cursor.execute(sql, [number_i, ])
an = cursor.fetchall()
number_list = []
# 统计正确题号
for item in an:
number_list.append(item['number'])
# 解压
f = zipfile.ZipFile(path2)
for file in f.namelist():
f.extract(file, path1 + '\\')
f.close()
# 删除压缩包
remove(path_z)
# 循环读入解压文件
for filename in os.listdir(path1):
# 识别
img_path = path1 + '\\' + filename
result = my_pp.fun11(img_path, number_list)
# 拿出识别结果的姓名学号
s_name = result['姓名'] # 学生姓名
s_id = int(result['学号']) # 学生学号
result.pop('姓名')
result.pop('学号')
# 初始化成绩
s_list = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for item in an:
num = str(item['number'])
if item['a_answer'] == result[num]:
s_list[item['number'] - 1] = (item['score'])
# 判断成绩是否存在,不存在就录入数据库,存在就更新数据库
sql = 'select * from student where id=%s and s_time=%s'
cursor.execute(sql, [s_id, number_i])
jilu = cursor.fetchall()
# 不存在,录入数据库
if len(jilu) == 0:
sql = 'insert into student(id,name,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s_time) values' \
'(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'
cursor.execute(sql,
[s_id, s_name, s_list[0], s_list[1], s_list[2], s_list[3], s_list[4], s_list[5],
s_list[6],
s_list[7], s_list[8], s_list[9], number_i])
conn.commit()
# 已存在,更新数据库
else:
sql = 'update student set id=%s,name=%s,s1=%s,s2=%s,s3=%s,s4=%s,s5=%s,s6=%s,s7=%s,s8=%s,s9=%s,' \
's10=%s,s_time=%s where id=%s'
cursor.execute(sql,
[s_id, s_name, s_list[0], s_list[1], s_list[2], s_list[3], s_list[4], s_list[5],
s_list[6],
s_list[7], s_list[8], s_list[9], number_i, s_id])
return render_template('批量阅卷.html')
bug2
jinjia报错:传给前端的数据无法识别,但是重新运行却可以识别
报错代码如下:
@app.route('/search', methods=['GET', 'POST'])
def do_search():
if request.method == 'GET':
return render_template('查看学生成绩.html')
else:
s_id = request.form.get('id')
s_number = request.form.get('number')
s_id = int(s_id)
s_number = int(s_number)
sql = 'select * from student where id = %s and s_time = %s'
cursor.execute(sql, [s_id, s_number])
data_s = cursor.fetchall()
data = data_s[0]
return render_template('查看学生成绩.html', data=data_s)
<tr>
<td>{{data.name}}</td>
<td>{{data.id}}</td>
<td>{{data.s1}}</td>
<td>{{data}}</td>
<td>{{data}}</td>
</tr>
虽然不知道为什么,不过我加了一个循环就好了,传给前端的参数也换成data_s
{% for item in data_s%}
<tr>
<td>{{item.name}}</td>
<td>{{item.id}}</td>
<td>{{item.s1}}</td>
<td>{{item}}</td>
<td>{{item}}</td>
</tr>
{% endfor %}