image


Обновленный курс «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-технологий!

Поделиться с друзьями
-->

Комментарии (0)