基于flask的代码上传

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)
upload

相关文章:

  • 2021-11-29
  • 2021-11-29
  • 2021-11-05
  • 2021-09-25
  • 2021-06-01
  • 2021-05-14
猜你喜欢
  • 2022-12-23
  • 2021-11-16
  • 2022-12-23
  • 2022-01-24
  • 2022-12-23
  • 2021-12-06
  • 2021-07-16
相关资源
相似解决方案