Django Python是否将数据库日志保存到zipfile?
我有一个django博客,想下载一个包含所有条目的备份zipfile。博客文章文本内容存储在数据库中 我写这段代码的目的是让zipfile在主zip目录中保存一堆.txt文件,但这段代码所做的只是输出一个损坏的zip文件。它无法解压,但出于某种原因,它可以在Word中打开,并显示所有的博客文章文本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
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
如果这里的目标只是备份数据,而不是使用这种特定的格式,那么我建议使用内置的管理命令。如果您想通过这样的视图为结果服务,您可以这样做