Веб-фреймворк Django

Иван Сагалаев, Григорий Бакунов

Яндекс

Язык Питон

Классный язык!

  • Динамическое типизирование, автоматическое управление памятью
  • Модульность, объектная ориентация
  • Замыкания, генераторы, интроспекция
  • Море библиотек
def display(values):
  '''
  Выводит непустые значения 
  из списка
  '''
  
  if not values:
    return 'Nothing to display'
    
  for value in values:
    print value or 'default'
    

Язык Питон

Некрасивости

  • Интерпретатор
  • Средства IDE работают не всегда
  • Хостеры, ПРОСЫПАЙТЕСЬ!

Фреймворк

Зачем он вообще нужен

Не Питон!

<body>

<?python

  print 'Чего???'

?>

</body>

Питон

import framework as fw

def handle(request):
  t = fw.template('index.html')
  data = {...}
  response = t.render(data)
  return fw.http(response)

Фреймворк

Что это конкретно

Фреймворк

Django

Был открыт в июле 2005 года

Оформился как самостоятельный продукт в стенах издательства Lawrence в Канзасе

Открытый исходный код, лицензия BSD

Разработчики: Adrian Holovaty, Simon Willison, Jacob Kaplan-Moss, Wilson Miner

Стиль Django

Full-Stack

  1. Прием запроса

    Авторизация, cессии, кеширование и прочие сервисы

  2. Диспетчер URL

  3. Общение с БД

  4. Вывод HTML

  5. Javascript, AJAX

Стиль Django

DRY

Модель:

class Comment(Model):
  article = ForeignKey(Article)
  text = TextField()
  email = EMailField()
    

Отсюда автоматически:

  • CREATE TABLE
  • <input type="text" maxlength="75">
  • Валидация с сообщениями об ошибке
  • update comment set email = '...'

Стиль Django

MVC

Стиль Django

ORM (типа...)

Григорий Бакунов:

Это не ORM, это SQL-констрактор!

Что умеет:

Article.objects.filter(date__month=1, date__year=2007)
  
Reply.objects.filter(article__author__username='dark-demon', 
                     date__gte=date.today()-timedelta(1))
  

Стиль Django

Подключаемые приложения

Проекты состоят из приложений.

Приложения могут использоваться в разных проектах.

Приложениями можно делиться!

Стиль Django

Шаблоны

print '<html...' — спасибо, больше не надо.

{% for article in articles %}
  
<tr class="{% cycle odd,even %}">
  <td>{{ article }}</td>
  <td>{{ article.date }}</td>
</tr>
  
{% endfor %}
  

Вы не можете: создать переменную, вызвать функцию с параметрами, писать на Питоне.

Вкусности

У нас тут целая экосистема

+ сторонние компоненты и приложения.

Вкусности

Админка

class Comment(Model):
  article = ForeignKey(Article)
  text = TextField()
  email = EMailField()
  
  class Admin:
    pass
  

И все!

Вкусности

Админка: общий вид

Вкусности

Админка: группировка и сортировка

Вкусности

Админка: поиск

Вкусности

Админка: редактирование

Яндекс и Django

Зачем?

А действительно, зачем?

Яндекс и Django

Зачем?

  • Ура, что-то новенькое!
  • Это быстро
  • Это весело
  • Это модно
типа велик

Яндекс и Django

С технической стороны

"Иван Васильевич, когда вы говорите, такое ощущение что вы бредите"

Яндекс и Django

С технической стороны

  • Хорошо подходит к нашим шестеренкам
  • Python, CORBA, XML, MySQL, Oracle, FastCGI
  • Разделение презентационной и бизнес логики
  • Возможность поступенного и постепенного развития

Яндекс и Django

С технической стороны

  • Хорошо подходит к нашим шестеренкам
  • Легко масштабируется
  • Простое разделение на фронтенды и базы данных
  • Сетевые возможности FastCGI
  • Гибкость настройки

Яндекс и Django

С технической стороны

  • Хорошо подходит к нашим шестеренкам
  • Легко масштабируется
  • Выдерживает нагрузки
  • Предсказуемое количество кода
  • Независимость от HTTP сервера
  • Максимальная производительность

Яндекс и Django

FAQ

1. Как Яндекс использует Django?
NDA!

Яндекс и Django

FAQ

1. Как Яндекс использует Django?
Как средство сверхбыстрой разработки и прототипирования.
2. Почему именно Python и Django?
Потому что это единственная серьезная платформа разработки в этой области.
3. А как же PHP?
И PHP у нас тоже есть, приходите работать.

Яндекс и Django

Планы

Спасибо за внимание!