python—如何将字符串传递到fileresponse对象的.close()方法中?

yuvru6vn  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(165)

我正在更改fileresponse对象的.close()方法的行为。fileresponse是streaminghttpresponse的一个子类,它与httpresponse对象非常相似。
我试图做的是获取一个文本字符串,将其保存到.docx中,将该docx发送到浏览器,然后删除该docx。在我尝试删除.docx之前,一切都很正常。看起来我无法在发送响应之前删除该文件,因为响应需要该文件,但在发送响应之后,我根本无法执行任何操作,因为视图已完成其任务并发送了响应。我发现的一个潜在解决方案是修改fileresponse对象(类似于httpresponse对象)的.close()方法来删除该文件。
伟大的但是,我不知道如何将文件的路径传递给.close()方法。这可能是一个基本问题,但我通常避免编辑内置类方法。
代码如下。

import logging
from django.http import FileResponse
import os  

logger = logging.getLogger("django")

# editing the default closing behavior of the file response object to delete the file

that it just sent.
class SendAndDeleteExport(FileResponse):
    def close(self):
        super(SendAndDeleteExport, self).close()
        # do whatever you want, this is the last codepoint in request handling
        logger.info(self)
        # os.remove(desired_path + "/export.docx"

        if self.status_code == 200:
            logger.info('HttpResponse successful: %s' % self.status_code)

我在控制台中获得了“httpresponse successful:200”,因此我知道我正在取得一些进展,但我需要将文件路径从视图传递到this.close()
views.py

from .helpers import SendAndDeleteExport
from docx import Document
import os

def export(request):
    cwd = os.getcwd()
    desired_path = os.path.join(cwd, 'exports')
    logger.info(desired_path)
    document = Document()
    paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.  edited againa')
    document.save(desired_path + "/export.docx")
    file_to_user = SendAndDeleteExport(open(desired_path + "/export.docx", 'rb'))
    return file_to_user

.docx文件确实正在生成并作为下载发送到客户端,这是所需的行为,但我不想无限期地保留所有这些导出的文件。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题