如何解压缩 zip 文件并将其显示为 python-Django 中的列表

How to unzip a zip file and show it as list in python-Django

我正在学习 python 和 django,我想创建一个端点来获取 zip 文件并遍历它并向我显示 zip 文件中的项目列表。实现这个最简单的方法是什么?我尝试了一些东西,因为我对 django 的了解一点也不好。

from django.core.files.storage import FileSystemStorage
import zipfile

class Upload(View):
    def post(self, request):
        context = {}

        if request.method == 'POST':
            uploaded_file = request.FILES['filename']
            zf = zipfile.ZipFile(uploaded_file)
            print zf.namelist()


            for filename in zf.namelist():

                fs = FileSystemStorage()                    
                rename = 'uploadedFile.jpg'                 
                name = fs.save(rename, filename)            
                context['url'] = fs.url(name)               

        return render(request, 'app.html', context)

所以基本上我的目的是从中获取一个 zip 文件并重命名它并为每个文件制作一个 url。我声明的代码不是执行此操作的正确方法,因为它会带来一些错误,请您以正确的方法帮助我吗?

我还没有在实时 django 项目上测试过这段代码,但这是我为你的任务编写代码的方式。

from zipfile import ZipFile

def get_filenames(path_to_zip):
    """ return list of filenames inside of the zip folder"""
    with ZipFile(path_to_zip, 'r') as zip:
        return zip.namelist()

在您看来:

class Upload(View):
    def post(self, request):
        # as you use class based views you can skip the check of request type (request.method == 'POST'). 
        # It always will be POST as it post() method
        filenames = get_filenames('your_zip.zip')           
        return render(request, 'app.html', {'filenames': filenames})

这只是示例,但您可以添加更多额外的逻辑,例如重命名等。

P.S。无法添加评论,但如果您在 python3 上并且在

上出现 SyntaxError
print zf.namelist()

只需将其括在方括号中即可:

print(zf.namelist())