В данной статье я бы хотел поделиться опытом изучения языка программирования Python в целом и фреймворка Django в частности (с нуля, или почти с нуля).
Немного истории
Чуть больше года назад я загорелся желанием изучить Python. После быстрого знакомства с синтаксисом (благо он мне показался дружелюбным) остро встал вопрос о реализации чего-то что можно было бы использовать в повседневной жизни, хотя бы в теории.
На глаза мне попалась статья в которой описывался курс, созданный с целью популяризации разработки среди девушек.
Как оказалось, это не какой-то очень заточенный гендерно курс, а чрезвычайно дружелюбный сборник уроков с низким порогом вхождения, хотя русский перевод все же ориентирован для женского пола.
Что это за зверь такой
О чем же этот курс? Базовая его часть посвящена разработке и деплою простенького блога на Django. В качестве
В расширенной его части добавляются более сложные кейсы как: простая модерация постов в блоге, добавление комментарием, авторизация, перевод базы с SQLite на PostgreSQL, деплой на heroku и получение домена.
В моем случае я оставил сайт для sqlite и pythonanywhere, так как проект сугубо личный.
Отклонение от начального курса
В то же время, в силу того что у меня были базовые знания в области разработки, готовые уроки были быстро пройдены. И я занялся усложнением базового проекта и доведением его до состояния, которое можно наблюдать сейчас (чукча не дизайнер, но пытался).
Кастомизация (или что можно еще придумать)
Все нижеприведеные примеры я считаю несложными и достаточно интересными для начинающих, и они в то же время помогут сохранять непрерывность изучения разработки в рамках одного проекта.
Блог
Итак, начнем с обновления блога.
В первую очередь в глаза, для тех кто ознакомлен с исходным курсом, бросается обновленный дизайн. Он взят из бесплатных примеров resposive стилей и немного обработан напильником.
Саму обработку напильником, как и в целом идею сменить дизайн с готового, представленного в рамках курса можно, на мой взгляд, считать более углубленным изучением HTML и CSS.
Следом хотел бы отметить добавление категорий, как по мне — идея лежит на поверхности. Я не стал делать полноценную древовидную структуру категорий, ограничившись группировкой категорий.
На этом расширение фукнциональности блога я посчитал завершенным и перешел к другим django-приложениям в рамках проекта.
"Дешборд"
Следом шел "dashboard", где изначально я планировал сделать некую информационную таблицу, но в какой-то момент отказался от этой идеи, перейдя к концепции один dash — одна страница.
В целом этот раздел можно считать посвященным работе со сторонними api.
Погода
Первым к реализации взял страничку погоды. В качестве провайдера использовал openweather. Среди бесплатных api у openweather есть как погода в данный момент времени, так и прогноз на 5 дней. Стандартных иконок bootstrap стало не хватать на этом моменте и я использовал бесплатный набор иконок погоды в svg. Для отображения графика максимальной/минимальной температуры использовался chartjs.
Валюты
Вторым шла страничка курсов валют. Т.к. проживаю я в Беларуси то в качестве источника информации взял официальный api от НБРБ. После реализации погоды не сделано практически ничего нового, просто информация от другого провайдера, для графиков также взят chart.js.
Криптовалюты
То же касается и третьего элемента приложения — раздела криптовалют. В качестве поставщика я взял api от coinmarketcap. Как раз во время реализации отображения криптовалют я столкнулся с ограничениями бесплатных api. И для того чтобы мое приложение не забанили я добавил кеширование результатов запросов в базу по простой схеме — если с момента такого же запроса к внешнему api прошло меньше порогового значения времени то я беру значение из базы.
Новости
Далее по списку идет четвертый элемент — новостная лента. Приступая к поиску открытых api для новостей я с радостью услышал что umputun открыл api сайта raido-t, предоставив доступ как к подкастам, так и новостям в текстовом виде.
Но тут меня ждал подвох. Бесплатные аккаунты на pythonanywhere имеют доступ к запросам с бекенда только к whitelist'у. В котором были и openweather и, как ни странно, сайт nbrb. Полистав ЧАВО я узнал что возможность расширить этот список есть, отправив в техподдержку линк на api и документацию к нему. Буквально через пару дней, чему я был несказанно удивлен, учитывая бесплатность аккаунта, адрес был добавлен в белый список.
Трекер задач
Еще одним отдельным приложением стал уже привычный после hello word и бложика todo.
Тут, после дешборда и блога, что-то новое в реализации сложно отметить. Еще одна тренировка создания моделей, верстки. Задания, категории, статусы. Несмотря на примитивность функциональности получилась вполне юзабельная страничка.
Что же еще
И казалось бы на этом все видимые надстройки над исходным проектом заканчиваются, но параллельно с добавлением страниц к "дешборду" я сделал телеграм бота, который предоставлял ту же информацию что и странички в дешборде но в текстовом виде.
Поначалу использовал django telegram bot библиотеку, что сподвигло меня к разделению конфигураций на dev и prod как раз с целью сделать бота не в pooling моде, а на основе webhooks.
Позже перешел на более базовую библиотеку, так как возникали проблемы с обновлением api. На этом этапе полезным для себя хотел бы отметить как изучение такой предметной области как построение телеграм бота и режимов его работы, так и разбор конфигурации.
Открытие api и android
После некоторого логического завершения работы над ботом возникла идея, все еще не завершенная, по написанию android приложения, которое бы также взаимодействовало с основным сайтом. Для этого я задействовал django rest framework, с помощью которого открыл доступ уже к api сайта с авторизацией по токену. В самом же приложении на данный момент есть только две плитки — погода и курсы валют:
Итог
По итогу могу отметить что связка Python+Django является весьма дружелюбной для новичков и снижает порог входа. Курс, с которого я начал, могу рекомендовать к прохождению, также как и могу рекомендовать раширять его подобными модулями для продолжения образовательного процесса.
Автор: разработчик 80-го уровня