Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Python是否将数据库日志保存到zipfile?_Python_Django_Python 3.x - Fatal编程技术网

Django Python是否将数据库日志保存到zipfile?

Django Python是否将数据库日志保存到zipfile?,python,django,python-3.x,Python,Django,Python 3.x,我有一个django博客,想下载一个包含所有条目的备份zipfile。博客文章文本内容存储在数据库中 我写这段代码的目的是让zipfile在主zip目录中保存一堆.txt文件,但这段代码所做的只是输出一个损坏的zip文件。它无法解压,但出于某种原因,它可以在Word中打开,并显示所有的博客文章文本 def download_backups(request): zip_filename = "test.zip" s = BytesIO() zf = zipfile.ZipF

我有一个django博客,想下载一个包含所有条目的备份zipfile。博客文章文本内容存储在数据库中

我写这段代码的目的是让zipfile在主zip目录中保存一堆.txt文件,但这段代码所做的只是输出一个损坏的zip文件。它无法解压,但出于某种原因,它可以在Word中打开,并显示所有的博客文章文本

def download_backups(request):
    zip_filename = "test.zip"
    s = BytesIO()
    zf = zipfile.ZipFile(s, "w")
    blogposts = Blog.objects.all()
    for blogpost in blogposts:
        filename = blogpost.title + ".txt"
        zf.writestr(filename, blogpost.content)
    resp = HttpResponse(s.getvalue())
    resp['Content-Disposition'] = 'attachment; filename=%s' % zip_filename
    return resp

非常感谢您的帮助。

基于此,您可能在读取模式方面有问题。在文件实际完成之前,您还需要显式或隐式地调用
zf.close()

我认为有一种更简单的方法可以使用临时文件来处理这个问题,它的优点是不需要将文件的所有内容都放在内存中

from tempfile import TemporaryFile
from zipfile import ZipFile


with TemporaryFile() as tf:
    with ZipFile(tf, mode="w") as zf:
        zf.writestr("file1.txt", "The first file")
        zf.writestr("file2.txt", "A second file")
    tf.seek(0)
    print(tf.read())
此处的
with
块将导致您的临时文件超出范围并被删除,并且在尝试读取文件之前隐式调用
zf.close

如果这里的目标只是备份数据,而不是使用这种特定的格式,那么我建议使用内置的管理命令。如果您想通过这样的视图为结果服务,您可以这样做