Django. От простого

В продолжении Django. Структура проекта.

Итак проект создан — и уже работает, можно запустить development сервер и посмотреть, что получилось:

$ ./manage.py runserver
Validating models...

0 errors found
Django version 1.4.3, using settings 'first.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Здесь видно что сервер запустился на loopback интерфейсе на порту 8000. Использование loopback-интерфейса по-умолчанию кроет в себе некий смысл:
development-сервер можно (и нужно) использовать только для разработки проекта.

Впрочем — можно переопределить и адрес и порт, так например

$ ./manage.py runserver 0.0.0.0:8080 

запустит сервер на всех адресах на порту 8080 и к нему можно будте обращаться по сети. Но, повторяюсь, использовать development-сервер можно только для разработки приложения, т.к. он имеет некоторые особенности. Из самых главных — это однопоточность, и автоматическая перезагрузка при изменении файлов проекта. Другие серверы (например apache+wsgi) необходимо перезагружать при изменении проекта, т.к. скрипты проекта читаются только при запуске сервера.

Уже можно открыть в браузере адрес http://127.0.0.1:8000 и увидеть надпись

It worked!

Должно работать как-то так:
Открывает страницу http://127.0.0.1:8000 и видим текст Hello World! Ничего более.
Итак, процессы происходящие в Django будет примерно такие:

  1. Браузер запросит URL /
  2. Django найдет соответствие в urls.py
  3. Запустит view соответсвующий этому URL
  4. View вернет HttpResponse с текстом Hello World!
  5. Django отправит ответ в браузер.

То, что делает браузер и Django нам нужно знать, но не нужно менять — это стандартные шаги для каждого запроса. От нас же зависят шаги 2 и 4, т.е. какой имеено view соответсвует данному URL и что именно он будет делать и возвращать.

Представление (view) — это просто функция, которая получает аргумент HttpReqeust и должна вернуть объект HttpResponse

Начнем с последнего, открываем файл views.py и создаем новое представление:

from django.http import HttpResponse
 
def hello(Response):
 return HttpResponse("Hello World!")

Теперь привяжем URL / к этому представлению, открываем файл urls.py и добавляем urlpatterns новый объект url:

url(r’^$’, ‘main.views.hello),

в данном файле уже довольно много комментариев с примерами, так что вопросов возникнуть не должно. Строчку же поясним:
url — функция возвращающая объект RegexURLPattern, не вдаваюсь, во всю механику: первый параметр — это регулярное выражение, определяющее URL, второй — представление которое нужно запустить. В нашем случае — регулярное выражение ^$ — соответсвующее пустому URL, и ‘main.views.hello’ — запустить передставление hello из пакета views пакета main, или, проще говоря, функцию hello файла views.py папки main.

Запускаем сервер (или, если он уже запущен) — смотрим страничку http://127.0.0.1:8000 — страничка изменилась на требуемую.

Дальше: Передаем параметры