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

Автор: | 02/03/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: второе представление – динамический контент.