оптимизация динамического обслуживания файлов в django - PullRequest
0 голосов
/ 15 декабря 2011

Я работаю над проектом django, который предоставляет API для генерации миниатюр изображений, и основная логика выглядит следующим образом:

  1. когда URL исходного изображения появляется впервые, django выполняет какую-то манипуляцию с изображением и возвращает миниатюру изображения

  2. когда снова появляется тот же URL изображения, django просто снова обслуживает предыдущее миниатюру изображения (сохраненную как статический носитель).

В основном, случай 2 случался гораздо чаще, чем случай 1. Теперь я использовал django для постоянной обработки изображений, что я считаю плохой практикой.

Интересно, можно ли сделать лучший способ обработки изображений для случая 2? Например, есть ли какой-нибудь способ попросить django отправить запросы прокси на apache и попросить apache предоставить файл?

Я знаю, что мог бы использовать перенаправление HTTP, чтобы сделать это, но это, кажется, вызывает слишком много запросов перенаправления на стороне клиента (одна страница HTML будет содержать много ссылок на этот API).

ТНХ.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2011

Самое простое решение моей головы - использовать правило перезаписи Apache с условием.

RewriteCond %(REQUEST_URI) ^media
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule #Some rewrite rule to redirect from '/media/filename' to '/image_generator/filename'

Это в основном просто проверяет, существует ли файл в каталоге мультимедиа, а если нет, отправляет пользователя в генератор изображений, который затем может сгенерировать и сохранить файл в / media, где его можно найти для следующий запрос.

NB. На самом деле я никогда не пробовал такого рода перенаправление с Django, поэтому может потребоваться некоторая настройка ...

0 голосов
/ 16 декабря 2011

См. Последующую часть этого раздела в документации:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive

Использование Alias ​​/ AddHandler / mod_rewrite позволяет Django накладывать статические файлы в файловой системе.Другими словами, статические файлы имеют приоритет.

0 голосов
/ 15 декабря 2011

Например, есть ли какой-нибудь способ попросить django отправить запросы прокси на apache и попросить apache предоставить файл?

У вас это точно в обратном направлении.

Прочтите руководство по развертыванию Django.https://docs.djangoproject.com/en/1.3/howto/deployment/modwsgi/#serving-files

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

Django никогда не должен обслуживать файл изображения (или .css или .js или что-либо, кроме .html).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...