понедельник, 3 сентября 2018 г.

Горшочек не вари

Обновление для Курсы по Python в офисе EVO

Регистрация на программы asyncio+aiohttp и Advanced asyncio ЗАКРЫТА.
Осталось только несколько мест на Python optimization.

Спасибо за понимание

понедельник, 27 августа 2018 г.

Курсы по Python в офисе EVO

Открыта регистрация на новую серию курсов по обучению Python.

Новый формат: каждый курс занимает полные выходные (суббота и воскресенье), состоит из двух занятий по 6 часов.
Занимаемся 50 минут, 10 минут на перерыв с чаем-кофе, и снова грызть гранит науки. Обед с пиццей прилагается.
Небольшие группы по 15 слушателей.

asyncio+aiohttp

22-23 сентября, начало в 11.00

Курс расчитан на "простых программистов", желающих научиться применять асихронную связку asyncio/aiohttp для решения ежедневных рабочих задач.

Клиент:
Учимся делать простого паука для обхода сайтов и вытаскивания из них данных.
  • Минимально необходимый набор asyncio API.
  • aiohttp client API: готовим правильно, не допуская стандартных ошибок.
  • Вебсокеты и таймауты
  • Одновременное выполнение HTTP запросов
Закончим примером, который делает какую-нибудь полезную работу.

Сервер:
Научимся создавать простые сервера на aiohttp.
  • Выдача страниц, шаблонизатор и подключение баз данных.
  • Загрузка HTML форм на сервер, работа с большими файлами.
  • Авторизация и сессии пользователя.
  • Серверные веб-сокеты
Плюс трюки и советы от автора.

Advanced asyncio
29-30 сентября, начало в 11.00

Курс для тех, кто хочет понять asyncio до самых мелких деталей.
  • Как работает event loop
  • В чем сходство и отличие между Task и Future, когда что следует применять
  • Что такое транспорт и зачем он нужен
  • Как тестировать асинхронный код
  • Как писать свои библиотеки на базе asyncio
Бонусом идет объяснение того, как должен выглядеть идиоматичный и правильный асинхронный код сегодня. Подход быстро меняется и совершенствуется. То, что выглядело классным и красивым два-три года назад -- сегодня несколько устарело.

Python optimization

6-7 октября, начало в 11.00

Оптимизаровать нужно в первую очередь алгоритмы и запросы к базе данных.
Если этого мало -- вам сюда.
Курс влючает:
  • Обзор инструментов для измерения производительности и нахождения узких мест
  • Обучение cython как относительно простому языку для создания глубоко оптимизарованных Python модулей.
  • Знакомство с Python C API в минимально необходимом объеме.
  • Демонстрацию примеров из рабочего кода с улучшением скорости выполнения узких мест в 10 и более раз. С показыванием и рассказыванием: как мерять, что делать и куда смотреть при оптимизации
  • Высший пилотаж: обучение созданию Python C Extensions на чистом C.

Стоимость

Каждый курс стоит 4500 грн.
При безналичной оплате скидка 5%.
При оплате сразу за два курса сразу скидка 5%. Три курса -- 10%.
Студентам (нужен скан студенческого билета на почту) -- 15%.
Скидки суммируются, т.е. студент который платит за три курса сразу по безналу получает 5+10+15 = 30%

Регистрация

Для регистрации пожалуйста заполните форму

UPD: регистрация на asyncio+aiohttp и Advanced asyncio закрыта.
Остались места только на 
Python optimization

В случае вопросов пишите на email

Количество мест ограничено.

Место проведения

Офис Evo, Харьковское шоссе 201/203 (м. Бориспольская).





Видео-записи и онлайн-вещания нет.

понедельник, 18 сентября 2017 г.

Вакансия программиста в ocean.io

Компании ocean.io, где я работаю, требуется Senior Software developer.
Киев, full time.

Плюшки -- код на Python 3.6, asyncio и aiohttp.

Остальные подробности расскажу при непубличном общении.

Если кому интересно -- пишите на andrew.svetlov@gmail.com

пятница, 30 июня 2017 г.

Куда поступать будущему программисту?

Прошу совета.

Мой крестник поступает в институт.
Это почти наверняка КПИ (который Киевский Политех).

Он хочет стать программистом, что я очень приветствую.

Вопрос в том какую кафедру и специальность выбрать.

При этом есть такое наблюдение: программистов сейчас как блох (не в обиду будет всем нам сказано и мне в том числе) а спецы по Data Science становятся всё более востребованными.

Так куда пойти?

И может кто посоветут какой контакт в КПИ чтобы я с преподавателями пообщался да порасспрашивал их что и как?

вторник, 13 декабря 2016 г.

Пельмени

Все знают что такое спагетти-код.

Термин стал очень популярным. "Макароны" -- признак говнокода, да?

Сегодня Google меня удивил подкинув ссылку на равиоли-код.
Ravioli code is a type of computer program structure, characterized by a number of very small and (ideally) loosely coupled software components.
Очень хорошее определение. Единственная проблема -- название немного не родное.

Равиоли -- это те же крошечные пельмешки, но слово "пельмени" мне ближе.

Предлагаю такую стратегию:
  1. Пишем пельмени-код.
  2. Если получается перейти на уровень равиоли -- у нас всё отлично
  3. Выходят манты или хинкали -- повод уделить пристальное внимание но в целом тоже ничего
  4. Если творение невозможно представить в виде пельменных собратьев и оно по внутреннему ощущению больше похоже как минимум на тульский пряник а то и на полноценный каравай -- нужно бить тревогу.

среда, 30 ноября 2016 г.

Цены снизились на семинар по async/aiohttp

Как вы знаете в декабре я провожу семинар по aiohttp/asyncio в Москве:

Positive Technologies, которая взяла на себя всю организацию меропрития, изыскала возможность несколько снизить накладные расходы. Как следствие цена тоже понизилась.

В итоге сумма составляет:

  • Регулярный платеж 12,000 руб.
  • Студенческий пакет (требуется скан студенческого билета) -- 7,000 руб.

Те, кто уже зарегистрировался -- не переживайте.
Скидка распространяется на всех.
Кому не пришло письмо с подтверждением -- извините.
До этого объявления с окончательной ценой мероприятия не хотелось переходить к финансовым вопросам.

Как записаться?
Заполните форму.

пятница, 18 ноября 2016 г.

Семинар по async/aiohttp

Благодаря неоценимой организаторской помощи компании Positive Technologies я проведу семинар по asyncio/aiohttp в Москве 17-18 декабря (суббота-воскресенье).

Что в составе семинара?


  1. Базовые знания об asyncio. Из всего огромного набора функций для начала работы нужно знать всего десяток. На них и сосредоточимся.
  2. Получение данных по протоколу HTTP с помощью aiohttp (client API). Всё, что нужно знать для составления собственного бота-паука.
  3. Простейший web server на aiohttp. Советы по организации кода, работа с базами данных, шаблонизаторами, сессией пользователя и прочее.
  4. Продвинутые технологии в aiohttp: сигналы, middlewares, вложенные приложения.
  5. Возвращаемся к asyncio: Future object и streaming API.
  6. asyncio транспорт и протокол как низкоуровневые конструкторские блоки.
  7. Описание работы asyncio loop изнутри.

Об авторе (т.е. обо мне)

  • В профессии с 1999 года
  • Python Core Developer с 2012
  • aiohttp maintainer
  • asyncio соавтор

Как это всё выглядит?


  • Два полных выходных дня (суббота и воскресенье), с обедом и парой кофе-брейков в течении каждого дня.
  • Небольшая аудитория в несколько дестков человек.
  • Строгого расписания и бесконечного потока слайдов нет. Есть примерный план но я смогу легко его поменять на лету ориентирусь на понимание темы слушателями.
  • Свободный формат общения. Т.е. я рассказываю и показываю, пользуясь проектором, редактором для кода, браузером, доской с маркерами. В любой момент можно задать вопрос если что-то непонятно -- буду объяснять и показывать пока не станет окончательно ясно.

На какую аудиторию расчитан семинар?


  • На энтузиастов, жадных к новым технологиям.
  • Знание asyncio не обязательно, но слушатели должны уметь программировать на Python и создавать web сайты с использованием любого framework: Django, Flask, Tornado и т.д.
  • Если уже есть опыт работы с asyncio/aiohttp но хочется узнать тему лучше и глубже -- вам тоже будет полезно.
  • В конце концов я -- соавтор обоих библиотек. Поверьте, я знаю как они устроены и как их использовать правильно -- и на семинаре буду делиться этими знаниями.

Время и место проведения

Семинар проходит 17-18 декабря. Суббота-воскресенье, два полных дня.
Обеды и кофе-брейки прилагаются.

Начало в 9.30, окончание -- 17.30

Место проведения -- офис Positive Technologies, Москва, Преображенская площадь дом 8 (станция метро "Преображенская площадь).




Стоимость и оплата

Стоимость 12,000 руб, студентам -- 7,000 руб.

Для регистрации заполните, пожалуйста, форму.
После регистрации вы получите письмо с детальной информацией об оплате.

вторник, 11 октября 2016 г.

Курсы по Python

После долгого перерыва я решил возобновить проведение курсов по Python.

Они состоятся в ноябре 2016, каждое воскресенье месяца.

Программ будет три:

aiohttp для начинающих

Четыре занятия по два часа.

Мы научимся делать сайты на aiohttp.
Простейшие странички, формы, веб-сокеты и проч.
Подключим базы данных, авторизацию, шаблонизатор.
Немного коснемся asyncio в том объёме, который предназначен для "простого программиста".
В общем всё, что нужно знать чтобы уверенно работать с aiohttp и совместимыми библиотеками.

Плюс советы от знатного собаковода на по правильной организации кода, отладке и разным хитростям.

Ожидаемый уровень знаний слушателей: умение писать на Python, работа с asyncio не требуется но умение создавать веб-сайты на любом питоновском инструменте (Django, Flask и т.д.) очень пригодится.

Стоимость: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.

Когда: 6, 13, 20, 27 ноября в 11.00 в Прожекторе.

Для регистрации заполните форму.

asyncio в деталях

Четыре занятия по два часа.

Курс расчитан на тех, кто уже что-то попробовал с asyncio/aiohttp но хочет понять всю внутреннюю кухню:
  • Что такое event loop и как он работает
  • В чем отличие между Task и Future, когда что применять
  • Что такое транспорт и зачем он нужен
  • Как писать собственные библиотеки на базе aiohttp
  • Чем тесты для асинхронного кода отличаются от привычного подхода
Плюс, как обычно, описание подводных камней и выводы из собственного опыта

Ожидаемый уровень знаний слушателей: умение писать на Python, немного попробовали что-то сделать на asyncio но хочется знать больше.

Стоимость: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.

Когда: 6, 13, 20, 27 ноября в 13.00 в Прожекторе.

Для регистрации заполните форму.

google map

Python: внутреннее устройство и оптимизация

Четыре занятия по два часа.

95% борьбы за производительность программ сводятся к набору правильных инструментов и алгоритмов. Например, грамотная денормализация базы данных ускорит выдачу гораздо лучше чем даже мгновенная сортировка-фильтрация на стороне питоновского кода. А мгновенного ничего не бывает...
Тем не менее иногда приходится ускорять уже оптимальный алгоритм.

На занятиях мы:

  • рассмотрим основные структуры CPython
  • научимся создавать свои функции и классы используя Python C Extesions
  • и, наконец, поймём что это утомительное занятие не требуется в 95% случаев благодаря наличию Cython
Управление памятью, потоки и GIL прилагаются.

Ожидаемый уровень знаний слушателей: хороший уровень владения Python (собственно программирования на самом Python практически не будет). Хотя бы остаточные знания C/C++ очень пригодятся.

Когда: 6, 13, 20, 27 ноября в 16.00 в Прожекторе.

Стоимость: 1200 грн за одно занятие или 3600 при оплате за весь курс сразу. Подробности по оплате -- в конце текста.

Для регистрации заполните форму.

Где


Киев, Воздвиженская ул. 34А, Дизайн среда "Projector".
Ближайшие станции метро: "Контрактовая площадь", "Почтовая площадь".


Оплата

Я убедительно прошу оплачивать посредством банковского перевода на мой счет ФОП. Реквизиты вышлю тем, кто зарегистрируется.
Сейчас практически все оформлены как частные предприниматели, так что выполнить перевод со своего ноутбука не составит труда.
В случае полной невозможности так поступить -- готов рассмотреть альтернативы в индивидуальном порядке.

Стоимость одного двухчасового занятия 1200 грн. При оплате сразу за весь курс слушатель платит 3600 экономит 1200 грн.

Студентам скидка в 50% (потребуется выслать скан студенческого билета).

Занятия разнесены во времени, можно посетить сразу все три курса (если выдержите, конечно).
При оплате за два курса скидка 25%, за три курса сразу скидка 50% (действует только при оплате за весь курс, на вариант оплаты за занятие дисконты на посещение нескольких курсов одновременно не распространяются).

четверг, 28 июля 2016 г.

PyCon Hong Kong

Организаторы продлили период Calls For Proposals.

Никто не хочет поехать с докладом?

Я там был в прошлом году, очень понравилось.

К сожалению в этот раз вынужден пропустить -- даты пересекаются с другим мероприятием.

Sammy Fung попросил распространить эту информацию среди коллег.

Теперь вы, коллеги, в курсе :)


Hi all,

Calls for Proposals (CFP) of PyCon HK 2016 is now extended to 8/14.

PyCon HK 2016 will be hosted at Hong Kong Cyberport on 29-30 October. PyCon HK is a python community conference hosting in Hong Kong, which looks for overseas and local speakers.
PyCon HK 2016 provides English track and Cantonese/Mandarin track.
PyCon HK 2016 ticket sales on eventbrite: http://pyconhk2016.eventbrite.com/?aff=cfp
PyCon HK 2016 website: http://pycon.hk/2016

--
Yours Sincerely,
Sammy Fung
Conference Chair, Hong Kong Open Source Conference.
President, Open Source Hong Kong.
http://opensource.hk

суббота, 5 марта 2016 г.

Нужен совет по выбору платформы для постройки робота

Я полгода занимался с очень умным мальчиком девяти лет, обучая его программированию.

Начали с scratch, сейчас дитё уверенно выбирает мышкой нужные блоки и может сделать простенькую игру -- лети и настреляй монстров, при этом съешь плюшки чтобы жизнь не закончилась.

Или платформер вроде Марио -- беги, прыгай и падай, кушай пряники и уворачиваясь от монстров.

Иногда у него возникают затыки -- в scratch нет debug mode, но с моей помощью находит решение.

В общем стало скучно, ничему по настоящему новому на scratch научиться уже невозможно. Дошли до scratch blocks если кто понимает -- но они не настоящие функции и предел достигнут.

Хочу переключиться на железяки -- это мальчика приводит в восторг.
Я управляю роботом -- офигенно круто!

Теперь собственно вопрос: что выбрать?

Не хочу брать Лего -- он тупой и дорогой. Цена меня мало волнует но желаю получить вещь, которую можно будет долго развивать и улучшать.

Arduino? Может что-то посовременней, на лучшем железе?

Плата с контактами ребенка впечатлит визуально но что с ней делать?

Я хочу получить готовый конструктор, из готорого можно будет сделать что-то ездящее и моргающее сразу.
С датчиками, которые можно будет использовать из коробки.
И эти сенсоры должны быть понятны ребенку: вариант обработки видео посредством opencv не подходит как вы понимаете.

Управление через android планшет тоже желательно -- это дает +100 к привлекательности.

Паять я не люблю но умею -- лучше если это будет именно конструктор.
К которому можно будет докупать детальки и превратить его хоть в вертолёт -- но должно ездить и бибикать из коробки (управляясь смартфоном).

Программирование.

Мальчик освоил scratch. Это графический интерфейс, программа создается перетаскиванием блоков мышкой.

Хотелось бы сохранить эту возможность на первом этапе.

Потом, понятно, нужно переходить на текстовые файлы.
Если там будет Python -- это плюс.
Какой-то специфический язык -- не беда.
Есть возможность дописывать на С близко к железу -- плюс, я умею:)

Итог:

Мне нужно выбрать платформу.

Гибкую и расширяемую, достаточно мощную и с перспективой развития (если захочу чтобы робот мигал светодиодом на мою улыбку -- у него дожно хватить ресурса процессора на это).

Открытую -- чтобы можно было докупать детальки и создавать новые поделки. Как в детском конструкторе с гайками и болтиками, только еще и сенсоры-моторчики. В перспективе компас и GPS. WiFi и всё такое.

Я хочу купить сразу не только плату с процессором а что-то что может быть интересно мальчику. Коструктор с моторчиками, колесами и датчиками. Если это совместимо -- готов покупать по частям.

Завершение.

Коллеги. Я полный чайник в робототехнике для детей.
Надеюсь, вы мне подскажите годные варианты.
Цена особой роли не играет -- было бы удобно

среда, 2 марта 2016 г.

Разница менталитетов и национальных деловых культур

Увидел интересную статью:
Разница менталитетов и национальных деловых культур

Кажется, автор попал в точку.

По опыту работы могу сказать: да, так и есть. "Наши" заморочки отличаюстся от американских. Это нужно знать и учитывать.

Читайте и удивляйтесь.

суббота, 16 января 2016 г.

Слайды по py.test

Сегодня был Kyiv.py #17, как обычно было круто и интересно.

С тезисами Алексея Поправки на тему "почему Фласк плохой" согласен.

Он хорош для маленьких поделок, при росте сложности проекта и размера команды вылезает сплошная боль в седалище.

Те, кто с этим несогласен -- просто привыкли :) и научились обходить самые неприятные моменты используя техники, не показанные в flask tutorial.

Я рассказывал о py.test.

Fixtures и разные трюки с pytest hooks.

Презентация -- http://asvetlov.github.io/pytest-slides/

пятница, 4 декабря 2015 г.

Motor 0.5

Мы строили-строили и наконец построили.

Motor 0.5 (асинхронный драйвер для MongoDB) доехал до релиза.

Новая версия работает с asyncio.
Всем рекомендую

четверг, 12 ноября 2015 г.

uvloop -- альтернатива стандартному asyncio loop

В последнее время Юра Селиванов (ага, тот самый автор PEP-492 aka async/await и MagicPython) работал над тем чтобы сделать asyncio побыстрее.

Он взял libuv и построил с её помощью uvloop -- asyncio совместимый event loop.

Результаты замера производительности здесь.

Получается, что uvloop в 3.5 раза быстрее стандартного и в 1.25 раза обгоняет gevent.
Т.е. абсолютный победитель по скорости в мире Python.

Библиотека пока еще не имеет стабильной версии, скоро всё будет.

вторник, 10 ноября 2015 г.

Видео с PyCon RU 2015

Я, конечно, тормоз и пишу спустя две недели -- но это лучше чем совсем промолчать.

Ссылки на доклады на ХабраХабре, там и мой есть тоже.

Если интересно -- открываем и смотрим.

P.S. Слайды -- здесь.

воскресенье, 1 ноября 2015 г.

Англицизмы в нашей речи

Навеяно вопросом Русские иностранные слова

Я часто выступаю с лекциями на конференциях.

По моему глубокому убеждению если доклад на русском -- нужно пытаться использовать русские термины (если они не слишком архаичные и понятны аудитории).

Это не всегда возможно. Рабочий язык программиста всё же английский.
Лично я предпочел бы ограничится родным, которым владею свободно -- но нет.

Тем не менее "конкурентый реквест шарится между тредами" звучит гораздо хуже чем "параллельный запрос разделяется между потоками".
Все поймут смысл в обоих вариантах, но первый режет слух.

Иногда устоявшегося русского термина не существует (Александр Бельченко при переводе слова commit в статьях о bazaar использовал фиксацию что технически правильно но абсолютно непонятно).

В таких случаях лучше оставлять английское слово как есть, commit но не коммит/комит (опять же вас лучше поймут, вариантов транслитерации много и часто они выглядят ужасно).

Eсли используете английские термины при вербальной коммуникации (а без этого никуда) -- произносите их правильно.
Т.е. так как оно должно звучать на английском/американском а не на ломаном руссиан пингин инглиш.

Еще один момент: делать слайды на русском или на английском?

Александр Соловьёв высказался пару лет назад.

Полностью его поддерживаю.

Если доклад будет на русском -- и слайды должны быть на этом же языке, с минимумом английских слов.

Например, лекцию по aiohttp для PyCon RU 2015 я читал на русском -- и слайды были соответствующие.
На следующей неделе буду читать ту же лекцию для PyCON Hong Kong 2015 -- и там слайды будут уже на английском по очевидной причине: я не владею китайским.

Если нужно, вовсем не трудно перевести ваши слайды на английский, да?
И наоборот -- англоязычные слайды перевести на язык, понятный аудитории.



    

воскресенье, 25 октября 2015 г.

Google group for aiohttp and aio-libs

https://groups.google.com/forum/#!forum/aio-libs

Сделал гуглогруппу для вопросов по aiohttp и aiolibs (aiopg, aiomysql, aioredis, aiozmq, aiohttp_session, aiohttp_toolbar и еще десятка библиотек).

В общем если вы стеснялись сделать issue в github -- вам сюда.

Если писали мне лично на email -- тоже. 

Язык общения -- предпочтительно английский (так больше читателей поймут и смогут ответить).
Если с основным языком программиста затык -- пишите на русском.
Только, прошу, не смешивайте -- как и водку с пивом.
Если топик англоязычный -- комментарии должны быть на неродном.

среда, 21 октября 2015 г.

Слайды с hdconf.by

ссылка

Большое спасибо организаторам hdconf.by -- конференция получилась замечательной!

Интересные докладчики и любопытные слушатели -- что может быть лучше?

MagicPython -- Syntax Highlighter для SublimeText

Мой приятель Юра Селиванов попросил написать рекламный пост о его новом проекте MagicPython.

Это syntax highlighter для Sublime Text и Atom, который поддерживает все новые языковые конструкции Python 3.5 (async def и await например) плюс type annotations, string formatting и регулярные выражения.

Sublime поддерживает Python из коробки, но с Python 3 (а особенно с Python 3.5) у него проблемы. MagicPython понимает всё.
Разметка шаблонов для форматирования строк и регулярок заслуживает отдельного упоминания -- выглядит прекрасно и заметно облегчает жизнь.

Я сам использую ортодоксальный Emacs и переходить (пока) не собираюсь, но MagicPython работает исключительно хорошо и заслуживает доброго слова.

К слову, Юра (https://twitter.com/1st1) Python Core Developer и автор PEP 492 aka async/await -- т.е. очень грамотный спец, который знает как делать качественные продукты.

Пользуйтесь с удовольствием.

P.S.

О редакторе Atom узнал только на этой неделе.
На первый взгляд выглядит как Sublime но при этом Open Source.
Уважаемые читатели, кто-нибудь его использует? Какие ваши впечатления?

среда, 13 мая 2015 г.

Почему я не люблю конфигурацию в django-style

Введение

Сегодня работал над добавлением в aiohttp.web свойства scheme для request object.

Идея простая: отвечать что request.scheme "http" для HTTP запросов, иначе "https".

У меня есть правило: перед началом погляди как другие уже справились с этой задачей.

У создателей популярных библиотек есть большой опыт по преодолению неочевидных проблем, учиться у мастеров -- полезно.

Так вышло что сегодня я смотрел код Django.

И было в том коде примерно такое:

@property
def scheme(self):
    if settings.SECURE_PROXY_SSL_HEADER:
        try:
            header, value = settings.SECURE_PROXY_SSL_HEADER
        except ValueError:
            raise ImproperlyConfigured(
                'The SECURE_PROXY_SSL_HEADER setting must be a tuple containing two values.'
            )
        if self.META.get(header, None) == value:
            return 'https'
    return 'http'

В целом очень хорошо: Django показала, как работать с HTTP и что делать если сервер расположен за HTTPS Reverse Proxy (Nginx, например).

В последнем случае я сконфигурирую Nginx чтобы он добавил несколько полезных HTTP HEADERS для HTTPS connection:

  proxy_set_header        Host $host;
  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header        X-Forwarded-Proto $scheme;

По X-Forwarded-Proto я пойму что это был HTTPS.

В целом стандартная и всем (надеюсь) известная процедура.

У aiohttp свободы чуть больше: оно может понять что сокет, по которому подключились напрямую, сам уже SSL -- но это пригодно только если мы готовы выставить наш aiohttp сервер прямо в веб.

Куда чаще его прячут за Nginx, HAProxy или похожим reverse proxy и там уже работают с сертификататами, проксируя обычный HTTP connection.

В общем всё прекрасно: Nginx выставит X-Forwarded-Proto HTTP HEADER который будет или "http" или "https".

Django глянет на settings.SECURE_PROXY_SSL_HEADER и если там ("X-Forwarded-Proto", "https") то scheme тоже будет "https".

Очень грамотно сделано, мне нравится.

Проблема

Так почему я этот пост написал?

А потому что settings.SECURE_PROXY_SSL_HEADER может быть чем угодно -- строкой, числом или ещё какой непотребной константой.

Проверка выполняется на момент получения request.scheme.

Нам, питонщикам, плевать на производительность в данном случае -- на самом деле try/except обходится дешево и никак не отразится на работе сайта.

Беда в другом -- ошибка неправильной конфигурации выявится не на этапе старта приложения а тогда, когда его выкатят в production.

У тестов будет свой правильный settings.py, а на production server админ чуть-чуть ошибётся.

И это тоже не слишком большая проблема -- при ручном тестировании команда QA, наверное, обнаружит ошибку очень быстро. Или на следующее утро -- тут уж зависит от того как техроцесс построен.

А теперь представьте что вы ошиблись в другой настройке. Очень редко используемой, но при этом важной.

Решение

Проблему вроде бы можно выявить рано, перестроив процесс запуска программы.

Для начала нужно отказаться от использования общего конфига в API.

Строить код библиотеки так, чтобы она никогда не лезла в settings.py (это и Flask касается если что).

Пусть все нужные классы принимают конфигурационные параметры явно, прямо в конструкторах.

Тогда можно быстро понять, что формат параметра не тот или IP address недоступен.

Разделение на этапы:

  • чтение конфига, анализ его и подготовка приложения к работе
  • запуск и работа

помогает избежать досадных недоразумений.

Плюс, к тому же, на явном этапе подготовки к старту можно позволить себе довольно дорогостоящие проверки на корректное функционирование системы (послать PING чтобы убедится что Redis живой, например).