2015-09-27 7 views
3

После прочтения тонны документации я до сих пор не очень хорошо понимаю, что именно считается статикой или загруженным пользователем файлом ... или что такое статический файл даже ,Django static vs. user uploaded files

1. Статические файлы

Джанго describes статические файлы, а такие вещи, как "образы, JavaScript, CSS". Хорошо, имеет смысл. Но все эти .py-файлы и .html-файлы шаблонов и т. Д. ... они не являются статическими? Они не «меняются» во время работы сайта. Что такое статический файл? Что означает «обслуживание статических файлов»? Как это отличается от «обслуживания» файла «views.py» или файла «home.html»?

Вдобавок ко всему, зачем мне вообще нужно «собирать предметы»? Почему все мои статические файлы должны быть в одном месте? Я полагаю, что если вы используете отдельный веб-сервер, чтобы «служить» им, что имеет смысл ... все же, не уверен, что именно это означает.

Кроме того, где же «collectstatic» подходит, чтобы найти все предполагаемые статические файлы? Проходит ли он через весь мой код и видит, где я обращаюсь к файлам изображений/javascript?

2. Пользовательские загруженные файлы

сказать, что я просто взять эту статическую вещь по номиналу, что произойдет, если пользователь загружает изображение? Нужна ли мне программа, работающая в фоновом режиме, которая постоянно запускается «collectstatic»?

Django describes мультимедийные файлы как способ управления загружаемым пользователем контентом. Честно говоря, я не пробовал это (сделаю это прямо сейчас), но все же это представляет собой вопрос: если так важно ставить все «статические» файлы в одном месте, почему это внезапно, не делайте этого для пользователей, загруженные файлы?

Являются ли файлы внутри этого каталога «MEDIA_ROOT» не собранными «collectstatic»? Что делать, если я просто поместил все мои изображения/javascript/css в эту папку для мультимедиа? Тогда ничего не собирается? Что-то не так с этим?

Благодарим за любую информацию, которую любой может пролить на это.

ответ

2

Статические файлы все, что ваши HTML шаблоны требуют, чтобы для правильного отображения - CSS, JavaScript, изображения, флэш-файлы и т.д. Они трактуются по-разному, поскольку нет ничего особенного, что Джанго должен сделать с ними. (С вашим view.py, он должен запускать в них код Python, с шаблонами, он должен отображать любые теги шаблонов, которые вы использовали и т. Д. - со статическими активами, их просто нужно обслуживать «как есть» для пользователя)

Команда collectstatic будет выглядеть в «статическом» подкаталоге каждого из ваших приложений, а также в любых дополнительных каталогах, которые вы определили в настройке STATICFILES_DIRS. Это означает, что ваш веб-сервер (Apache, Nginx и т. Д.) Должен обслуживать только один каталог, чтобы сделать все ваши активы доступными для ваших пользователей, а не для «статического» каталога каждого отдельного приложения.

Пользователь загрузил файлы не будут собраны collectstatic команды - и может храниться отдельно. Вы не хотите смешивать свои собственные CSS/JS/изображения и т. Д. С ними.

Они уже идут в одном каталоге, который может обслуживаться вашим веб-сервером, и его вообще не нужно собирать.

2

Что такое статический файл?

Статические файлы - это файлы, которые вы создали в своем проекте, и их необходимо обслуживать непосредственно в браузере (как правило, JavaScript, CSS и изображения).
Ваши файлы Python, такие как views.py, напрямую не отправляются в браузер, они выполняют некоторую обработку для создания HTML-файла, который будет отправлен в браузер.

Что означает «обслуживание статических файлов»?

Обслуживание статических файлов отправляет файл в ответ на веб-запрос, который выполняется веб-сервером.

Почему мне вообще нужно «собирать предметы»?

collectstatic использует переменную STATICFILES_DIRS в вашем файле settings.py, чтобы найти все ваши статические файлы и помещает их в одном месте. Вы должны сделать это на своем рабочем сервере, потому что у этой папки должен быть другой параметр безопасности, чем файлы вашего проекта. Вы не хотите, чтобы пользователь мог загрузить ваш model.py, например.
collectstatic может также включать в себя минимизацию и обфускацию, используя что-то вроде django-конвейера.

Нужна ли мне программа, работающая в фоновом режиме, которая постоянно запускается «collectstatic»?

Нет, медиафайлы - это совсем другая история. Это файлы, которые пользователи загружают в вашу систему (в отличие от статических файлов, которые вы создаете). Эти файлы обычно сохраняются в файловой системе на вашем сервере, и в вашей базе данных создается запись с адресом в файл с некоторыми метаданными, определенными в вашей модели. models.FileField имеет атрибут upload_to, который контролирует, где эти файлы должны храниться относительно переменной MEDIA_ROOT в ваших settings.py.

Эти файлы должны быть отделены от файлов проекта на сервере или даже на каком-либо другом сервере, чтобы они оставались на месте при обновлении вашего сайта.

1

Большинство ответов уже даны в документации:

  1. https://docs.djangoproject.com/en/1.8/ref/contrib/staticfiles/ - как Джанго найти статические файлы и многое другое

  2. https://docs.djangoproject.com/en/1.8/howto/static-files/ - как статические файлы должны быть поданы в разработчика

  3. https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/ - как статические файлы должны быть отправлены в pro + some intro для автоматического сбора данных через ткань.

В нескольких словах: статические это те файлы, которые отвечают за внешний вид вашего сайта не для его структуры и информация представления (CSS, JS, IMG, видео & и т.д.).

В dev вы помещаете все статические файлы в static и автоматически обслуживаете сервер dev.

Когда вы находитесь на pro, статические файлы должны храниться в папке staticfiles/static вне директории вашего проекта. Медиа в staticfiles/media (вы можете дать другое название этим разделам). Это должно быть сделано по двум причинам: с точки зрения безопасности и для всех ваших статических данных, которые будут обслуживаться отдельным веб-сервером. Вы можете автоматически запускать collectstatic при каждом изменении, которое вы делаете, - попробуйте использовать его. Пользователи загружают все файлы, уже находящиеся в вашей медиа-папке, поэтому для этого вам не нужно запускать collectstatic.

 Смежные вопросы

  • Нет связанных вопросов^_^