19 апреля 2012 г.

Django in Depth (James Bennett)

Продолжаем новый формат и повышаем планку. На этот я предлагаю вам потратить 3 часа своей жизни ради интереснейшего доклада с PyCon US 2012 - Django in Depth, это дополненная современными реалиями версия одноименного доклада с PyCon US 2010, от того же докладчика. Докладчика, к слову, зовут James Bennett, который помимо основной работы в Mozilla успевает быть контрибьютором и релиз-менеджером Django, да и вообще стоял у истоков его создания. Доклад, в целом, рассчитан на разработчиков с опытом, повествование построено снизу вверх, то есть с глубинных процессов внутри Django - на поверхность. И несмотря на свою длину, интересен до последней минуты.

Обязательно к просмотру всем, кого интересует какие механизмы работают внутри Django и почему. Ну и, конечно, советы от Django-гуру не повредят вашему мастерству :)

Видео (3 часа 5 минут)



По существу, в докладе освещены такие темы:

1. ORM
  • архитектура Django 1.4;
  • как работает Django ORM, вся цепочка от database backend до model;
  • менеджеры, кастомные QuerySet-классы;
  • корректная работа в несколькими БД (роутинг, шардинг);
  • трюки с переопределением методов модели .save() и .delete();
  • абстрактные и прокси- модели;
  • Q- и F- выражения.

2. Формы
  • кастомные виджеты/мультивиджеты;
  • валидаторы;
  • динамическое создание форм;
  • медиа-файлы.

3. Шаблоны
  • как работает загрузчик шаблонов;
  • low-level работы шаблонизатора;
  • темплейт-теги и их парсер;
  • что есть контекст на самом деле и как происходит рендеринг.

А также:
  • request/response;
  • URL resolution;
  • handlers;
  • views (в том числе любимые нами class-based);
  • middlewares;
  • админка (оговорены некоторые возможности кастомизации, что можно и что не стоит переопределять).

Ну и некоторые факты с доклада, для затравки:
  • "Oracle is weird" (Джеймс о базе данных, неоднократно упрекнул её в "магичности");
  • имплементация класса Query занимает 1900 строк кода, это один из самых сложных и загадочных (here be dragons) модулей во всём Django;
  • Query.__str__() возвращает скомпилированный SQL-запрос;
  • QuerySet.exists() намного эффективней обычной булевой проверки;
  • "Just don't use classmethods, use managers". Аргументы не до конца ясны, но смысл в том, что нужно описывать действия над моделью на уровне менеджера модели. Видимо потому, что менеджер имеет больше отношения к объекту типа queryset, чем classmethod и концептуально вписывается в архитектуру ORM (что тоже не аргумент, но поверим опытному дядьке). Обсуждение вопроса на 51-й минуте видео.

Комментариев нет:

Отправить комментарий