Лекция #5. Введение в язык программирования Python 3Яковенко КириллWeb-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Профилирование и отладка DjangoVladimir RudnyhПри написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
10 - Web-технологии. MVC фреймворки (продолжение)Roman Brovko1. Контроллеры в Django
2. Объекты HttpRequest и HttpResponse
3. Получение GET и POST параметров
4. Работа с HTTP заголовками в Django
5. Декораторы
6. Шаблонизация в Django
7. Наследование шаблонов
8. Context processors
11 - Web-технологии. Работа с СУБДRoman Brovko1. Реляционная модель данных
2. Проектирование баз данных
3. Работа с СУБД в Python
4. Работа с СУБД в Django
5. Понятие ORM, модели Django
6. Описание таблиц и связей в модели Django
7. Типы полей в моделях
Эффективное программирование на NodeJSYura BogdanovДоклад рассматривает тонкости nodejs, а так же преимущества Evented I/O для серверных приложений. Будет предоставлен ряд рекоммендаций по правильному построению архитектуры, модульности, масштабированию, дизайну кода. Краткое введение в технологию программирования "волокнами" (fibers) и ряд других эффективных практик.
Лекция #5. Введение в язык программирования Python 3Яковенко КириллWeb-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Профилирование и отладка DjangoVladimir RudnyhПри написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
10 - Web-технологии. MVC фреймворки (продолжение)Roman Brovko1. Контроллеры в Django
2. Объекты HttpRequest и HttpResponse
3. Получение GET и POST параметров
4. Работа с HTTP заголовками в Django
5. Декораторы
6. Шаблонизация в Django
7. Наследование шаблонов
8. Context processors
11 - Web-технологии. Работа с СУБДRoman Brovko1. Реляционная модель данных
2. Проектирование баз данных
3. Работа с СУБД в Python
4. Работа с СУБД в Django
5. Понятие ORM, модели Django
6. Описание таблиц и связей в модели Django
7. Типы полей в моделях
Эффективное программирование на NodeJSYura BogdanovДоклад рассматривает тонкости nodejs, а так же преимущества Evented I/O для серверных приложений. Будет предоставлен ряд рекоммендаций по правильному построению архитектуры, модульности, масштабированию, дизайну кода. Краткое введение в технологию программирования "волокнами" (fibers) и ряд других эффективных практик.
Руслан Ханов, «Контейнер сервисов — Что? Где? Когда?»Mail.ru GroupВ докладе были рассмотрены типичные примеры и антипаттерны того, что обычно помещают в контейнеры, зачем это делают и каким образом.
Контейнер сервисовRuslan HanovSymfony Moscow Meetup Symfoniacs #8
«Контейнер сервисов — Что? Где? Когда?»
В докладе будут рассмотрены типичные примеры и антипаттерны того, что обычно помещают в контейнеры, зачем это делают и каким образом.
12 - Web-технологии. Django моделиRoman Brovko1. Создание и изменение объектов
2. Загрузка данных из базы
3. QuerySet
4. ModelManagers
5. Расширение ModelManagers
6. Миграции баз данных
Илья Шаляпин, Евгений Генералов: Разработка через тестирование в Python и Djn...it-peopleБольшинство примеров тестов в книгах, семинарах и презентациях упрощены настолько, что их невозможно применить в реальных проектах. Из-за такого упрощения, сначала получаешь заряд мотивации, но столкнувшись с суровой действительностью быстро бросаешь написание тестов. Мы решили исправить этот пробел, показав тестирование на реальных примерах из нашей практики. Мы расскажем о тестировании баз данных, сетевых взаимодействий и веб-форм. Также расскажем об инструментах, которые мы используем для тестирования.
Drf vs GraphqlВадим ШевченкоПреимущества и недостатоки в работе Django Rest Framework и GraphQL на примерах
Оптимизация запросов с фронтом. Фильтрация, выборка вложенных данных
Как мы уменьшили сложность наших проектовBoris TsemaВ Python web разработке есть стандартные подходы к архитектуре и дизайну кода, привнесённые распространёнными web-фреймворками, но они не давали нам достаточной простоты и гибкости. Поэтому мы решили попробовать другое: немного Domain-Driven Design, немного слоёв в архитектуре, немного (микро-) сервисов. В результате проекты стали проще для понимания, оптимизации и изменения. Теперь мы можем быстрее их начинать и быстрее добавлять новых разработчиков даже на последнем этапе (мы почти отменили закон Брукса!).
В докладе я хочу поделиться нашим опытом и практическими рекомендациями, которые мы сформировали для наших проектов.
Доклад, в основном, практический, может быть интересен как тимлидам и python-разработчикам, знакомым с вышеупомянутыми концепциями, но не использующим их на практике, так и видящим их впервые.
Лекция 11. Вычислительная модель PregelTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 14. Hadoop в Поиске Mail.RuTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 13. YARNTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 12. SparkTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 10. Apache MahoutTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 9. ZooKeeperTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 7. Введение в Pig и HiveTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 6. MapReduce в Hadoop (графы)TechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 5. MapReduce в Hadoop (алгоритмы)TechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 4. MapReduce в Hadoop (введение)TechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 3. Распределённая файловая система HDFSTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 2. Основы HadoopTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
Лекция 1. Введение в Big Data и MapReduceTechnoparkТехносфера Mail.ru Group, МГУ им. М.В. Ломоносова.
Курс "Методы распределенной обработки больших объемов данных в Hadoop"
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9rPxMIgPri9YnOpvyDAL9HD
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №10 "Нереляционное решение в области баз данных — NoSQL". Лектор - Станислав Ступников.
Вводная часть посвящена определению и истории развития концепции NoSQL. Даются характеристики, рассказывается о способах использования. Рассматриваются виды NoSQL БД, теоретические основы NoSQL, а в конце лекции обсуждаются недостатки NoSQL-решений, а также проводится сравнение разных NoSQL-решений.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №10 "Нереляционное решение в области баз данных — NoSQL". Лектор - Станислав Ступников.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №9 "Безопасность баз данных"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №9 "Безопасность баз данных". Лектор - Павел Щербинин.
Открывается лекция рассказом о резервном копировании (о логических и физических резервных копиях, о выборе данных для копирования). Затем определяется терминология для обсуждения дальнейших вопросов. После этого рассматриваются основы учётных записей: таблицы доступа, привилегии, виды записей. Обсуждаются SQL-injection, список смежных вершин (Adjacency Set), вложенное множество (Nested Set), материализованный путь (Materialized Path) и комбинированный подход.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №8 "Конфигурирование базы данных"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №8 "Конфигурирование базы данных". Лектор - Павел Щербинин.
Сначала объясняются основы конфигурирования и общие принципы настройки. Далее рассказывается об области видимости, о настройке использования памяти, обсуждается размер блока ключей key_cache_block_size. Рассматривается устройство и использование кэша InnoDB, а также кэшей потоков и таблиц. Затем говорится об особенностях ввода/вывода в InnoDB. Далее рассказывается о табличном пространстве, оптимизации файловой сортировки, переменных состояния. Финальная часть лекции посвящена репликации: настройка, синхронизация, топология, планирование пропускной способности, администрирование и обслуживание, проблемы и их решения.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №7 "Оптимизация запросов и индексирование". Лектор - Павел Щербинин.
Вначале рассказывается об оптимизации доступа к данным, о декомпозиции соединения и состоянии запроса. Далее идёт большой блок, посвящённый оптимизатору запросов (изменение порядка соединения, применение алгебраических правил эквивалентности, оптимизации COUNT(), MIN(), MAX(), вычисление и свертка константных выражений, покрывающие индексы, оптимизация подзапросов, раннее завершение, сравнение по списку IN() и распространение равенства). Затем последовательно рассматриваются такие вещи, как соединение (JOIN) в MySQL, оптимизатор сортировки, коррелированные подзапросы, слияние и непоследовательный просмотр индексов, функции SELECT & UPDATE, COUNT(). После этого рассказывается об оптимизации запросов с помощью JOIN, GROUP BY, DISTINCT и LIMIT со смещением. В конце лекции даётся информация о кэшировании запросов, объединённых таблицах и секционировании.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №5 "Определение узких мест"TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №5 "Определение узких мест". Лектор - Павел Щербинин.
Вначале рассказывается о подсистемах хранения: MyISAM, InnoDB, Memory, о критериях выбора подсистем хранения, приводятся практические примеры. Затем обсуждается тема индексирования (B-tree, хеш-индексы) и EXPLAIN (столбцы id, table, possible_keys, key, key_len).
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...TechnoparkТехнопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных".
Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-запросы". Лектор - Павел Щербинин.
Лекция открывается рассказом о том, что такое профилирование запроса, каковы его этапы выполнения в MySQL. Рассказывается о том, как планировать запрос, как осуществляется протоколирование запросов, как собирается статистика. Объясняются основы индексирования, подробно обсуждаются стратегии индексирования для достижения высокой производительности: изоляция столбца, кластерные индексы (преимущества и недостатки), размещение данных в MyISAM и InnoDB, покрывающие индексы. Далее затрагивается тема нормализации и денормализации, а также таблиц счётчиков. В завершении рассказывается о версионировании схемы БД: о методах инкрементных изменений, идемпотентных изменений, уподобления структуры БД исходному коду.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
2. План лекции
1. Скрипт управления django приложением.
2. Middleware.
3. Использование сессий.
4. Приложение auth.
5. Class Based Views.
6. Расширение фильтров и тэгов в
шаблонизаторе.
7. Другие приложения из коробки.
8. Оптимизация производительности
2
5. Ручная инициализация
import os
import sys
if __name__ == "__main__":
lib_path = 'path/to/project'
if not lib_path in sys.path:
sys.path.append(lib_path)
os.environ['DJANGO_SETTINGS_MODULE'] =
'ask_pupkin.settings'
# from django.conf import settings
from ask.models import User
…
5
7. Management команды
class Command(BaseCommand):
help = 'Fill database with test data'
def handle(self, *args, **options):
verbosity =
int(options.get('verbosity', 1))
for i in xrange(USER_COUNT):
user = User(
name=get_random_string(10),
email=get_random_email()
)
user.save()
if verbosity > 1:
self.stdout.write('Successfully
imported %d users' % USER_COUNT)
7
8. Управление django приложением
Возможности
• Запуск скриптов для конкретного приложения
(manage.py sqlall ask)
• Несколько команд в одном файле (manage.py
fill_db users, manage.py fill_db questions)
• Дополнительные опции (--delete)
https://docs.djangoproject.com/en/dev/howto/custommanagement-commands/
8
13. CSRF в Django
• «Небезопасные» методы POST, PUT и DELETE
• Установка cookie (csrftoken)
• Установка hidden поля (csrfmiddlewaretoken)
или заголовка (X-CSRFToken)
13
14. CSRF в Django
1. Для установки куки страница должна отдаваться
динамически
2. Кука может не ставиться, если передача контекста
идет через Context вместо RequestContext
3. Скрытое поле ставится тегом {% csrf_token
%}, используйте RequestContext (функция render)
4. Токен в ajax запросах удобнее передавать заголовком
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
14
28. Django Auth
Login/Logout средствами django
1. Подключить в роутинге контроллеры входа и выхода
(r'^accounts/login/$', 'django.contrib.auth.views.logi
n')
(r'^accounts/logout/$', 'django.contrib.auth.views.log
out')
2. Создать шаблоны
registration/login.html
registration/logged_out.html
3. GET параметр next для возврата
28
30. Django Auth
Проверка авторизации во views
def my_view(request):
if not request.user.is_authenticated():
return redirect('/login/?next=%s' %
request.path)
user = request.user
@login_required
def my_view(request):
...
30
31. Django Auth
Проверка авторизации в шаблонах
{% if user.is_authenticated %}
Welcome, {{ user.username }}
{% else %}
Please log in.
{% endif %}
31
32. Django Auth
Расширение текущего пользователя
from django.contrib.auth.models import User
class UserProfile(models.Model):
user =
models.OneToOneField(User, related_name='profile')
rating = models.PositiveIntegerField()
>>> u = User.objects.get(username='masha')
>>> print u.profile.rating
32
33. Django Auth
Расширение текущего пользователя
• Другой уникальный ключ пользователя (email вместо
username)
• Дополнительные поля (в т. ч. обязательные)
https://docs.djangoproject.com/en/dev/topics/auth/customizing
/#extending-the-existing-user-model
33
37. Class Based Views
Контроллер-класс (пример 1)
class PostDetail(generic.DetailView):
model=Post
urlpatterns = patterns('',
url(/slideshow/web-2013-8-31460523/31460523/r&)/$', PostDetail.as_view(), n
ame='post_detail'),
)
37
46. Фильтры и теги в шаблонизаторе
Фильтр
{{ post.content|cut:"<cut>" }}
Simple Tag
{% current_time "%Y-%m-%d %I:%M %p" %}
Inclusion tag
{% popular_tags 20 %}
46
47. Фильтры и теги в шаблонизаторе
Assignment tags
{% get_current_time "%Y-%m-%d %I:%M %p" as
the_time %}
Блок с закрывающим тегом
{% switch %} {% endswitch %}
47
48. Фильтры и теги в шаблонизаторе
Добавление тега
blog/
__init__.py
models.py
templatetags/
__init__.py
blog_tags.py
tests.py
views.py
48
49. Фильтры и теги в шаблонизаторе
from django import template
from blog.models import Post
register = template.Library()
@register.inclusion_tag('blog/tags/lastposts.html')
def last_posts():
return {'post_list': Post.objects.all()[:5]}
49
50. Фильтры и теги в шаблонизаторе
Шаблон
<ul>
{% for object in post_list %}
<li><a href="{{ object.get_absolute_url}}">{{
object }}</a></li>
{% endfor %}
</ul>
Подключение
{% load blog_tags %}
{% last_posts %}
https://docs.djangoproject.com/en/dev/howto/custom-templatetags/
50
52. Административная консоль
Подключение
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
…
# Uncomment the next line to enable the admin:
url(/slideshow/web-2013-8-31460523/31460523/r&)),
)
52
53. Административная консоль
Подключение
from blog.models import Category, Post
from django.contrib import admin
class PostAdmin(admin.ModelAdmin):
date_hierarchy = 'creation_date'
list_display = ('title', 'category')
list_filter = ('category',)
search_fields = ('title',)
admin.site.register(Category)
admin.site.register(Post, PostAdmin)
53