Как загрузить изображение или файлы из модели Django

Я новичок в python и я создаю сайт, на котором пользователи могут покупать изображения Hi-Res, и теперь я ищу способ позволить пользователю скачать изображения, которые они купили, из модели Django, Вот моя модель изображений:

class Pic(models.Model):
    name = models.CharField(max_length = 60, blank = False)
    description_sizes = models.TextField(blank = False, name = 'des_sizes', max_length = 360)
    captured_time = models.DateField(blank = False)
    price = models.IntegerField(blank = False)
    preview = models.ImageField(upload_to = f'static/post/preview/', null = False, blank = False)
    tags = models.CharField(max_length = 1000, blank = False)
    image_files = models.FileField(upload_to ='posts/ogFiles', null = True, blank = False)

Мой views.py :

def singlePostView(request, pic_id = None):
    pic = Pic.objects.get(id = pic_id)
    print(pic)

    context = {
    'pic':pic,
    }
    return render(request,"post/single_post_view.html", context)
  

Я ищу способ сделать кнопку или ссылку для загрузки image_file из pic модели в single view, и я ищу это уже несколько дней и только что наткнулся на эти : xsendfile module

или использовать подачу следующим образом :

 <a  href="/project/download"> Download Document </a>

and in urls.py:

url(r'^download/(?P<path>.*)$', serve, {'document root': settings.MEDIA_ROOT}),

ну для модуля xsendfile это не совсем эффективный способ bc

  • изначально был разработан для Apache 2 & 2.2.
  • .
  • не является стандартным модулем Apache
  • не поддерживается с 2011 года.

а для serve потому что это не защищенный url пользователь может скачивать другие файлы по другим путям.

есть ли альтернативное решение для загрузки из модели Django???

Вы можете добавить атрибут "download" внутри вашего тега для загрузки файлов.

<a  href="/project/download" download> Download Document </a>

https://www.w3schools.com/tags/att_a_download.asp

источник: https://stackoverflow.com/a/57803641/10178508

Вам нужно указать браузеру, чтобы он рассматривал ответ как вложение файла.

Согласно документу Django ссылка Вот как вы можете сделать -

response = HttpResponse(my_data, headers={'Content-Type': 'image/jpeg','Content- 
           Disposition': 'attachment; filename="foo.jpeg"'}).

Прочитайте о заголовке Content-Disposition.

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