- PVSM.RU - https://www.pvsm.ru -
Обновленный курс «Web-технологии [1]» на платформе Stepik [2] теперь поддерживает последнюю версию Django и возможность вести разработку как на Python 2, так и на Python 3. Преподаватели курса — Дмитрий Смаль и Динар Сабитов, web-программисты из игрового направления Mail.Ru Group. Второго марта мы перезапускаем «Постановку задачи на разработку ПО [3]» без дедлайнов, чтобы вы смогли пройти курсы в удобное время и получить сертификаты. Преподаватель курса — Дмитрий Безуглый, генеральный директор в компании "Системный подход", бизнес-аналитик и системный аналитик.
Stepik — платформа онлайн-курсов. Большинство из них открыты только в отведенное время — это стимулирует нерешительных участников записываться. Курс делится на модули, которые нужно сдавать в срок. Дедлайны повышают мотивацию студентов. Справляются не все — сертификаты получает в среднем 9 % учащихся. Первый курс от Mail.Ru Group открылся 1 сентября 2015 года. С этого момента к нам записались 67 600 человек, которым мы выдали 5300 сертификатов. Самый популярный курс за все время — «Web-технологии [1]». На него зарегистрировались 12 400 человек, это в два раза больше среднего. Поэтому мы стараемся совершенствовать курс и делать его еще более удобным.
Мы создали «Web-технологии [1]», чтобы познакомить начинающих программистов с миром веба и бэкенд-разработкой на 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, мы подготовили небольшой список проблем, с которыми вы, вероятнее всего, столкнетесь при обновлении. Ключевым изменением в Django 1.7 стала поддержка миграций базы данных. У manage.py появились команды migrate
и makemigrations
для работы с миграциями. Команда syncdb
была удалена в Django 1.9. Подробнее о том, как работают миграции, можно почитать в документации [4].
Также в Django 1.7 был значительно изменен механизм загрузки приложений [5]. Если у вас есть standalone-скрипты, которые используют переменную окружения DJANGO_SETTINGS_MODULE
, то в них необходимо явным образом инициализировать приложение, вызывая django.setup()
. Это не касается скриптов, выполняемых через management commands.
В версии 1.7 появилась новая система проверки проекта [6]. Команда validate
была удалена, ей на смену пришла команда check
. Она помогает обнаружить проблемы и дает подсказки по их исправлению.
В версии 1.8 поле AbstractUser.last_login
может принимать значения, равные null
. А в Django 1.10 увеличили длину AbstractUser.username
до 150 символов. Если в своем проекте вы используете AbstractUser
, не забудьте написать миграцию для изменения полей. Миграция для django.contrib.auth.User [7] уже существует, вам необходимо выполнить только migrate
.
Также в версии 1.10 удален метод django.conf.urls.patterns()
, который использовался для создания шаблонов для urlpatterns
. Теперь urlpatterns
можно присваивать обычный list [8]. Более подробную информацию про несовместимые изменения можно найти в официальной документации:
Если у вас появится желание попробовать 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 вы можете ознакомиться здесь [14].
Чтобы зарегистрироваться на курс, перейдите по ссылке [15]. Напоминаем, что со 2 марта мы открываем курс «Постановка задачи на разработку ПО [16]» без дедлайнов. У нас есть и другие IT-курсы: программы по Java, C/C++, Hadoop и алгоритмам. Посмотреть полный список можно здесь [17]. Желаем удачи в изучении web-технологий!
Автор: Mail.Ru Group
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/247275
Ссылки в тексте:
[1] Web-технологии: https://stepik.org/course/Web-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8-154/
[2] Stepik: https://stepik.org/explore/courses
[3] Постановку задачи на разработку ПО: https://stepik.org/course/%D0%9F%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8-%D0%BD%D0%B0-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D1%83-%D0%9F%D0%9E-1128/
[4] документации: https://docs.djangoproject.com/en/1.10/topics/migrations/
[5] загрузки приложений: https://docs.djangoproject.com/en/1.10/ref/applications/
[6] система проверки проекта: https://docs.djangoproject.com/en/1.10/topics/checks/
[7] django.contrib.auth.User: https://docs.djangoproject.com/en/1.10/ref/contrib/auth/
[8] обычный list: https://docs.djangoproject.com/en/1.10/topics/http/urls/#example
[9] Django Deprecation Timeline: https://docs.djangoproject.com/en/1.10/internals/deprecation/#deprecation-removed-in-1-10
[10] Версия 1.7: https://docs.djangoproject.com/en/1.10/releases/1.7/#backwards-incompatible-changes-in-1-7
[11] Версия 1.8: https://docs.djangoproject.com/en/1.10/releases/1.8/#backwards-incompatible-changes-in-1-8
[12] Версия 1.9: https://docs.djangoproject.com/en/1.10/releases/1.9/#backwards-incompatible-changes-in-1-9
[13] Версия 1.10: https://docs.djangoproject.com/en/1.10/releases/1.10/#backwards-incompatible-changes-in-1-10
[14] здесь: http://stackoverflow.com/documentation/python/809/incompatibilities-between-python-2-and-python-3
[15] ссылке: https://stepik.org/154
[16] Постановка задачи на разработку ПО: https://stepik.org/1128
[17] здесь: https://stepik.org/org/mailru
[18] Источник: https://habrahabr.ru/post/323056/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.