Джанго: Загрузите временное изображение
В настоящее время я пытаюсь создать функцию в приложении 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.