Django Book: как Django обрабатывает запрос

Автор: | 03/02/2015
 

django_logo_2Продолжение Django Book: первая страница Django-проекта – “Hello, World!”.

Перед тем, как перейти к созданию нашего второго представления – давайте сделаем паузу, и узнаем немного больше о том, как работает Django.

Например, когда вы видите текст “Hello world“, зайдя на страницу http://127.0.0.1:8000/hello/ – что же именно делает Django за кулисами?

Всё начинается с файла настроек. Когда вы запускаете python manage.py runserver, скрипт ищет файл settings.py в директории вашего проекта. Этот файл содержит все настройки для данного Django проекта, все они записаны заглавными буквами: TEMPLATE_DIRS, DATABASES и т.д. Самая важная – это ROOT_URLCONF. Этот параметр указывает Django – какой именно модуль Python должен быть использован в качестве URLconf для этого сайта.

Вы ведь помните, что выполнение django-admin startproject создаёт файлы settings.py и urls.py? Сгенерированный таким образом файл settings.py содержит опцию ROOT_URLCONF, которая указывает на сгенерированнуый файл urls.py. Откройте файл settings.py, что бы увидеть это:

$ cat settings.py | grep ROOT_URLCONF
ROOT_URLCONF = 'example.urls'

Эта строка указывает на файл example/urls.py.

Когда Django получает запрос к конкретному URL-у, например – /hello/, Django загружает модуль URLconf, указанный в ROOT_URLCONF. Затем проверяется каждый из URLpattern-ов в этом URLconf-е, сверяя полученный URL и шаблоны до тех пор, пока не найдёт совпадение. Когда Django находит совпадение с шаблоном в одном из URLpattern – вызывается функция представления, которая связана с ним и первым аргументом ей передаётся объект HttpRequest (мы рассмотрим HttpRequest  детальнее попозже).

Как мы видели в нашем предыдущем примере – функция представления должна вернуть HttpResponse. Как только это происходит – Django делает всё остальное, преобразовывая Python-объект в подходящий Web-ответ с соответстсующими заголовками HTTP и телом (т.е. – содержимым страницы).

В итоге:

  1. поступает запрос к URL/hello/;
  2. Django определяет корневой URLconf, проверяя параметр ROOT_URLCONF;
  3. Django проверяет все URLpattern-ы в URLconf-е до первого совпадения шаблона с /hello/;
  4. если сопадение найдено – вызывается связанная с этим шаблоном функция представления;
  5. функция возвращает HttpResponse;
  6. Django преобразовывает HttpResponse в корректный ответ HTTP и страницу.

Теперь вы знаете основы того, как создавать страницы с Django. Это очень просто – просто напишите несколько функций, и свяжите их с URL-ами с помощью URLconfs.

Продолжение – в статье Django Book: второе представление – динамический контент.