from flask import Flask,Blueprint,request,render_template from flask import current_app as app from uploadCode import db from models import CodeRecord import zipfile import shutil import os import uuid uploadBlue = Blueprint("uploadBlue", __name__) @uploadBlue.route("/upload", methods=["GET", "POST"]) def upload(): if request.method == "GET": return render_template("upload.html", error="") # 先获取前端传过来的文件 file = request.files.get("zip_file") # 判断是否是zip包 zip_file_type = file.filename.rsplit(".", 1) if zip_file_type[-1] != "zip": return render_template("upload.html", error="上传的必须是zip包") # 解压保存 upload_path = os.path.join(app.config.root_path, "files", str(uuid.uuid4())) print(upload_path) # zipfile.ZipFile(file.stream, upload_path) shutil._unpack_zipfile(file, upload_path) # 遍历保存的文件夹得到所有.py文件 file_list = [] for (dirpath, dirname, filenames) in os.walk(upload_path): for filename in filenames: file_type = filename.rsplit(".", 1) if file_type[-1] != "py": continue file_path = os.path.join(dirpath, filename) file_list.append(file_path) # 打开每个文件读取行数 sum_num = 0 for path in file_list: with open(path, mode="rb") as f: for line in f: if line.strip().startswith(b"#"): continue sum_num += 1 # 得到总行数去保存数据库 return str(sum_num) @uploadBlue.route("/") def index(): # 展示用户提交代码柱状图 queryset = db.session.query(CodeRecord).all() date_list = [] num_list = [] for obj in queryset: date_list.append(str(obj.upload_date)) num_list.append(obj.code_nums) return render_template("index.html", date_list=date_list, num_list=num_list)
相关文章: