Джанго: Загрузите временное изображение

В настоящее время я пытаюсь создать функцию в приложении Django для загрузки датафрейма pandas в виде изображения. Я хочу создать изображение как временный файл, загрузить его, а затем удалить. Кто-нибудь знает, как интегрировать tempfile в этот код?

Views.py

def download_png(request, study):
    Names(study) #Funciton to get (name) variable
    Retrieve(study) #Function to get (data) variable
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    pngfilename = str(name) + "_" + str(current_time) + ".png"
    temp = tempfile.NamedTemporaryFile(suffix=".png")
    fig = temp.write(df2img.plot_dataframe(data))
    filepath = temp.name
    response = HttpResponse(df2img.save_dataframe(fig=fig, filename=filepath), content_type=mimetypes.guess_type(filepath))
    response['Content-Disposition'] = "attachment; filename=%s" % pngfilename
    return response   

Вот как вы можете использовать библиотеку tempfile:

tempfile = tempfile.mktemp(suffix='.png')

with open(temp, 'w') as f:
    f.write(df2img.plot_dataframe(data))
    do_something_with_your_file(temp)
    os.unlink(temp)

Edit: только что читал документацию по tempfile и, очевидно, tempfile.mktemp подвержен условиям гонки, поэтому вы должны либо использовать tempfile.mkstemp, как:

fd, tempf = tempfile.mkstemp()

Или существует менеджер контекста:

with tempfile.NamedTemporaryFile() as tmp:
    with open(tmp.name, 'w') as f:
        f.write('some data')
    # do something with your tempfile file

После этого он автоматически удалит файл tempfile.

Вернуться на верх