Вадим Полшков
Oct. 3, 2019, 8:36 p.m.

Скачивание файлов

Здравствуйте.
Сделал небольшую модель для хранения прайс листа

  1. class PriceList(models.Model):
  2. '''Модель прайс листа'''
  3. title = models.CharField(max_length=250, verbose_name='Заголовок')
  4. file = models.FileField(upload_to='price_list/%y/%m/%d/', verbose_name='Файл')
  5. count = models.PositiveIntegerField(default=0, verbose_name='Кол-во загрузок')
  6. is_active = models.BooleanField(default=True, verbose_name='Модерация')
  7. created = models.DateTimeField(auto_now_add=True, verbose_name='Создан')
  8. updated = models.DateTimeField(auto_now=True, verbose_name='Изменен')
  9.  
  10. def __str__(self):
  11. return self.title
  12.  
  13. class Meta:
  14. verbose_name = 'Прайс лист'
  15. verbose_name_plural = 'Прайс листы'
  16. ordering = ['-created']

Нужно чтобы загрузка файла была доступна с любой страницы сайта. Поэтому сделал через контекстный процессор.

  1. def price_list(request):
  2. '''Прайс лист'''
  3. price = PriceList.objects.filter(is_active=True)
  4.  
  5. return {'price_list': price}

Все работает хорошо, файл прайс листа добавляется с админки и скачивается с сайта.
Вопрос. Как сделать подсчет количества скачиваний файла?

2

Do you like it? Share on social networks!

5
Evgenii Legotckoi
  • Oct. 4, 2019, 12:57 p.m.

Добрый день.

Первое, что приходит на ум, так это сделать ссылку на какой-нибудь view, который будет увеличивать счётчик скачиваемого файла, и только потом переадресовывать непосрдественно на скачиваемый файл в отдельной вкладке.

Это самое просто, что можно реализовать.

    Вадим Полшков
    • Oct. 4, 2019, 9:02 p.m.
    • (edited)

    можете примером кода помочь? я сделал но у меня получилось, что при обновлении страницы счетчик увеличивает значение а нужно по клику по ссылке чтоб это происходило.
    и получается, что после того как сделал ссылку на эту вьюху, то это работает только сдесь http://192.168.1.5:8001/price
    если перейти на любую другую страницу то ссылки вобще нет.

      Evgenii Legotckoi
      • Oct. 6, 2019, 11:22 p.m.
      • The answer was marked as a solution.

      Добрый день. Я имел ввиду, что нужно сделать отдельную вьюшку, которая будет делать редирект.

      Например, может быть такая вьюшка

      1. def counted_download(request, pk):
      2. file = get_object_or_404(File, pk=pk)
      3. file.downloads += 1
      4. file.save()
      5. return redirect(file.get_absolute_url())

      А в шаблоне страницы просто добавить именно url этой вьюшки, вместо прямой ссылки на файл

      1. {% url 'counted_download' file.id %}

      Не забудьте вьюшку добавить в urls.py

      Собственно говоря - это первое, что я попытался бы сделать

        Здравствуйте.
        Спасибо, я вас понял, сегодня чуть позже сделаю.

          Вадим Полшков
          • Oct. 9, 2019, 10:04 p.m.
          • (edited)

          Здравствуйте.
          Все получилось, только редирект сделал по другому redirect(price.file.url)
          Спасибо вам за помощь!

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            • Last comments
            • AK
              April 1, 2025, 11:41 a.m.
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              March 9, 2025, 9:02 p.m.
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              March 9, 2025, 4:14 p.m.
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
            • ИМ
              Nov. 22, 2024, 9:51 p.m.
              Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            • Evgenii Legotckoi
              Oct. 31, 2024, 11:37 p.m.
              Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup