С помощью него приложение может работать с веб-сервером(Nginx, Apache, и многими другими) по протоколу WSGI. Вот здесь написано о протоколе, а вот тут и тут как его применять в Django.
Как зачем, затем чтобы вам меньше приходилось писать руками и делать свои велосипеды :) Вы можете не обращать на этот файл внимания, если используете другой протокол, к примеру FastCGI.
Этот файл необходим для подключения к wsgi-серверу, он содержит стандартный интерфейс для запуска вашего конкретного приложения (поэтому и создается при startproject).
Я о том — почему бы его не разместить в саму Django — в стандартные либы.
Не уж-то его придется часто менять в процессе реализации проекта?
А если у вас на сервере в одном окружении джанги, крутиться более одного проекта?
Это файл настроек для конкретного, текущего проекта. Считайте так же важный как и settings.py в каждом проекте.
Так а virtualenv на что? Если больше 1ого проекта крутится,
то там по-любому разные либы могут быть,
и разные версии джанги.
settings.py — редактируется часто, это мы знаем.
А wsgi.py — в каких случаях мы будем трогать (именно менять\редактировать) и как часто?
Не, это не так… к слову, я для себя так и не уяснил — зафига он нужен, поскольку
у самого в ближайшие 100 лет желания менять его не появится.
А примеров где надо его менять, так
никто и не привел. :)
В нем содержится вызов функции конкретно вашего приложения, в результате, как правило, всё что вам нужно настроить в wsgi-сервере — это указать путь к этому файлу. Если бы он был один на весь фреймворк, то отличать одно приложение от другого пришлось бы как-то ещё, и virtualenv это более сложный способ, и не всегда необходимый. Ну и в конце-концов логично, что интерфейс связанный с конкретным приложением — лежит в папке приложения, а уж добавлять в него чего-то или нет — решать вам.