Обновленный курс «Web-технологии» на платформе Stepik теперь поддерживает последнюю версию Django и возможность вести разработку как на Python 2, так и на Python 3. Преподаватели курса — Дмитрий Смаль и Динар Сабитов, web-программисты из игрового направления Mail.Ru Group. Второго марта мы перезапускаем «Постановку задачи на разработку ПО» без дедлайнов, чтобы вы смогли пройти курсы в удобное время и получить сертификаты. Преподаватель курса — Дмитрий Безуглый, генеральный директор в компании «Системный подход», бизнес-аналитик и системный аналитик.
Stepik — платформа онлайн-курсов. Большинство из них открыты только в отведенное время — это стимулирует нерешительных участников записываться. Курс делится на модули, которые нужно сдавать в срок. Дедлайны повышают мотивацию студентов. Справляются не все — сертификаты получает в среднем 9 % учащихся. Первый курс от Mail.Ru Group открылся 1 сентября 2015 года. С этого момента к нам записались 67 600 человек, которым мы выдали 5300 сертификатов. Самый популярный курс за все время — «Web-технологии». На него зарегистрировались 12 400 человек, это в два раза больше среднего. Поэтому мы стараемся совершенствовать курс и делать его еще более удобным.
О курсе «Web-технологии»
Мы создали «Web-технологии», чтобы познакомить начинающих программистов с миром веба и бэкенд-разработкой на Python. В курсе мы рассказываем о схемах работы серверов. Особый акцент мы делаем на разработку бэкенда с использованием фреймворка Django. Еще мы даем основы фронтенд-разработки: HTML, CSS, JS, а в дополнительных главах обсуждаем технологию Ajax и доставку real-time сообщений.
Задания курса бывают разными: в одном месте вы выбираете правильный вариант ответа, в другом — вносите его в специальное поле, в третьем — пишете программу. Задания на программирование взаимосвязаны. На протяжении курса мы пошагово дополняем сервис «Вопросов и ответов» — упрощенный Stack Overflow. Вначале настраиваем nginx и gunicorn, затем развертываем Django-приложение, которое постепенно дорабатываем.
О деталях обновления
В «Web-технологиях» есть задания, которые необходимо выполнять на виртуальной машине. Результаты контролируются автоматическими тестами. Часто тесты делают HTTP-запросы к приложению пользователя, которое загружено на виртуальной машине. Мы анализируем ответы и понимаем, правильно ли решено задание.
Но во многих задачах этого бывает недостаточно. Например, мы тестируем модели приложения и проверяем, что у нее определены все необходимые поля и менеджеры. В этом случае мы загружаем свой скрипт на виртуальную машину, рядом с кодом, который необходимо протестировать.
До недавнего времени на виртуальной машине стояла Django 1.6, и все тесты мы запускали с Python 2.7. К нам поступало много жалоб о том, что Django слишком старая и что люди хотят использовать Python 3. Поэтому мы переписали свои скрипты так, чтобы они корректно работали с версиями Django 1.6—1.10. А для самих тестов теперь доступны два интерпретатора. Сначала тесты запускаются с Python 2, а в случае обнаружения ошибок — с Python 3.
Что нужно знать при переходе с Django 1.6 на 1.10
Для того чтобы облегчить переход на более новую версию Django, мы подготовили небольшой список проблем, с которыми вы, вероятнее всего, столкнетесь при обновлении. Ключевым изменением в Django 1.7 стала поддержка миграций базы данных. У manage.py появились команды migrate
и makemigrations
для работы с миграциями. Команда syncdb
была удалена в Django 1.9. Подробнее о том, как работают миграции, можно почитать в документации.
Также в Django 1.7 был значительно изменен механизм загрузки приложений. Если у вас есть standalone-скрипты, которые используют переменную окружения DJANGO_SETTINGS_MODULE
, то в них необходимо явным образом инициализировать приложение, вызывая django.setup()
. Это не касается скриптов, выполняемых через management commands.
В версии 1.7 появилась новая система проверки проекта. Команда validate
была удалена, ей на смену пришла команда check
. Она помогает обнаружить проблемы и дает подсказки по их исправлению.
В версии 1.8 поле AbstractUser.last_login
может принимать значения, равные null
. А в Django 1.10 увеличили длину AbstractUser.username
до 150 символов. Если в своем проекте вы используете AbstractUser
, не забудьте написать миграцию для изменения полей. Миграция для django.contrib.auth.User уже существует, вам необходимо выполнить только migrate
.
Также в версии 1.10 удален метод django.conf.urls.patterns()
, который использовался для создания шаблонов для urlpatterns
. Теперь urlpatterns
можно присваивать обычный list. Более подробную информацию про несовместимые изменения можно найти в официальной документации:
Что нужно знать при переходе с Python 2 на 3
Если у вас появится желание попробовать Python 3, прочитайте про основные отличия, на которые следует обратить внимание. В новой версии языка оператор print
был заменен функцией print()
. Методы словарей items()
, keys()
и values()
теперь возвращают итераторы. Старые методы iteritems()
, iterkeys()
и itervalues()
больше не поддерживаются. Также у словарей удален метод has_key()
, вместо него требуется использовать оператор in
. Функция xrange()
исключена, так как в новой версии range()
выполняет ее задачи.
Изменились и числовые типов. Начиная с Python 3 типы long
и int
объединены в один — long
. Его значения больше не имеют завершающего символа L, поэтому функция repr()
не будет выводить его. Еще одно важное нововведение — замена целочисленного деления через оператор /. Теперь эта операция будет возвращать число типа float
.
В Python 3 для хранения текста используется тип str
, а для хранения бинарных данных — bytes
. Стоит отметить, что эти типы нельзя сочетать, иначе возникнет ошибка TypeError
. Для конвертирования одного типа в другой можно использовать функции str.encode()
и bytes.decode()
. Встроенный тип basestring удален.
При сравнении неупорядоченных типов теперь будет возвращаться исключение TypeError
. Метод сравнения пользовательских объектов больше не поддерживается, поэтому для сортировки нужно воспользоваться функцией __lt__()
, а для сравнения — __eq__()
и __hash__()
. Функции builtin.sorted()
и list.sort()
перестали принимать аргумент cmp
, обеспечивающий функцию сравнения, ему на смену пришел key
.
Метод raw_input()
переименован в input()
. Функция input()
в Python 2 эквивалентна eval(input())
. Убран метод execfile()
. Вместо execfile(fn)
можно использовать exec(open(fn).read())
.
С более подробным списком различий Python 2 и 3 вы можете ознакомиться здесь.
Регистрация на курс
Чтобы зарегистрироваться на курс, перейдите по ссылке. Напоминаем, что со 2 марта мы открываем курс «Постановка задачи на разработку ПО» без дедлайнов. У нас есть и другие IT-курсы: программы по Java, C/C++, Hadoop и алгоритмам. Посмотреть полный список можно здесь. Желаем удачи в изучении web-технологий!