Веб-фреймворк 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
Прием запроса
Авторизация, cессии, кеширование и прочие сервисы
Диспетчер URL
Общение с БД
Вывод HTML
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
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 %}
Вы не можете: создать переменную, вызвать функцию с параметрами,
писать на Питоне.
Вкусности
У нас тут целая экосистема
- contrib.session
- contrib.auth
- cache (memcached, MySQL, файлы)
- GzipMiddleware
- serializers (XML, JSON)
- test, test.Client
- contrib.syndication (RSS, Atom)
+ сторонние компоненты и приложения.
Вкусности
Админка
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
Планы
- Помогать развитию проекта
- Расширить область его применения
- Улучшить внутри его интеграцию с нашими технологиями
- Захватить мир и заставить Django повелевать людьми
Спасибо за внимание!