Динамично создайте миниатюры изображения (использующий django)

Я хотел бы динамично создать миниатюры на основе параметров в URL. Например, http://mysite.com/images/1234/120x45.jpg создал бы a 120x45 миниатюра для идентификатора изображения 1234.

Очевидное решение этого состоит в том, чтобы иметь представление django, которое делает следующее:

  1. Ищите ранее кэшированную версию изображения в этом размере.
  2. Создайте миниатюру, если она не кэшировалась (некоторая логика для блокировки так, чтобы только 1 процесс создал миниатюру, и другие процессы ожидают).
  3. Передайте результаты по каналу через django.

Это должно "работать", но я обеспокоен производительностью. Мне не нравится идея использовать django для обслуживания статического содержания. Что некоторые другие пути состоят в том, чтобы выполнить эту проблему?

8
задан Cícero Verneck Corrêa 22 August 2013 в 16:37
поделиться

4 ответа

[11878903-

Вам не нужно использовать Django, чтобы использовать статический контент напрямую. Просто попросите свой серверный маршрут 404 запросов на папку изображений к представлению Django, где он разделяет имя файла и генерирует соответствующую эскиз, прежде чем перенаправлять обратно к исходному URL-адресу (который, надеюсь, больше не будет 404).

Что касается другого ответа Django-ImageKit, я не уверен, что это делает что-нибудь, чтобы позволить вам динамически генерировать изображения больших пальцев на основе URL, но я, конечно, рекомендую использовать его для всех функций имеет.

Редактировать:

как для фактической структуры URL, я чувствую себя более типичным /Images/FileName-120x45.jpg позволит вам легче отфильтровать 404 запросов, которые не имеют ничего общего с Динамическое поколение миниатюры. Скажем, например, что есть тонны 404 ошибок для /Images/original_size_image.jpg . Вы бы не хотели бы, чтобы те, которые были направлены в Django, и вы могли бы соответствовать именам этого формата только с Regex. [End Edit]

Вы должны быть осторожны, хотя о том, чтобы сообщить кому-либо осознавать эту функцию SPAM вашего приложения Django. Они могут потенциально убить его с бесконечным количеством размера изображений и комбинаций имени файла у их кончиков пальцев. Вам нужно будет поступить, как поставить верхние пределы по этим запросам, например, для перенаправления обратно на 404, если либо измерение больше, чем оригинал, или даже выяснить, как загрузить запросы на несколько измерений одинакового изображения. Может быть, это было то, что вы были, когда вы упомянули «запирание», хотя.

Кроме того, я вижу, что вы пометили Apache, но я очень хотел бы порекомендовать, чтобы вы служили статическому контенту через что-то вроде nginx . Возможно, вы можете отрицать дополнительный накладные расходы динамических запросов изображений, если вы используете статический файловый сервер, который не является полным дерьмом в обслуживании статических файлов.

8
ответ дан 5 December 2019 в 07:11
поделиться

Вы также можете попробовать Sorl , он используется Satchmo .

5
ответ дан 5 December 2019 в 07:11
поделиться
2
ответ дан 5 December 2019 в 07:11
поделиться

Вы можете взять заглянуть на Сорл-миниатюрную документацию . Я использую его практически во всех моих проектах вместе с обслуживающим статическим контентом с NGINX из / Media / :)

2
ответ дан 5 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: