Pull to refresh
2
0
Send message

Django Rest Framework для начинающих: создаём API для чтения данных (часть 1)

Reading time11 min
Views178K

Меня зовут Стас Гаранжа, я выпускник курса «Python-разработчик» в Яндекс.Практикуме. Я хочу помочь начинающим разработчикам, которые приступили к изучению Django Rest Framework (DRF) и хотят разобраться, как устроен этот фреймворк.


Я готовлю цикл статей, в которых расскажу о разных сторонах работы DRF. У меня пока нет значимого практического опыта для описания всех изюминок при работе с этим фреймворком, поэтому в основе статьи — исследование, обобщение и по возможности непротиворечивое изложение того, что у DRF под капотом.


В этой статье разберёмся, как сделать REST API на базе Django Rest Framework, чтобы получить по GET-запросу набор записей из базы данных (БД). Иными словами, рассмотрим, как DRF работает на чтение (о том, как с помощью него создавать, изменять и удалять записи в БД, поговорим в отдельной статье).


Общую схему решения этой задачи мы рассмотрим в первой части статьи. Вторая будет посвящена детальному разбору процесса сериализации данных.


Читать дальше →

Как байпасить reCaptcha V3 с помощью Selenium Python?

Reading time4 min
Views20K

*bypass - обход

Мы будем использовать библиотеку python Selenium для байпаса google reCaptcha v3. Следуйте пошаговой инструкции, чтобы получить результат.

Для примера мы будем использовать демо-версию Google reCaptcha api.

Здесь ссылка: https://www.google.com/recaptcha/api2/demo

Читать далее

Векторные языки — SQL интерпретатор в 100 строк

Reading time16 min
Views11K

В предыдущей статье я описал векторные языки и их ключевые отличия от обычных языков. На коротких примерах я постарался показать, как эти особенности позволяют реализовывать алгоритмы необычным образом, кратко и с высоким уровнем абстракции. В силу своей векторной природы такие языки идеально присоблены для обработки больших данных и в качестве доказательства в этой статье я полностью реализую на векторном языке простой SQL интерпретатор. А чтобы продемонстрировать, что программист на векторном языке может писать на векторном языке на любом языке, я реализую тот же самый интерпретатор на Rust. Преимущества векторного подхода столь велики, что даже интерпретатор в интерпретаторе сможет обработать select с группировкой таблицы в 100 миллионов строк за полминуты.

Читать далее

Улучшаем производительность сайта с помощью PageSpeed от Google

Reading time5 min
Views16K


Всех приветствую! Присаживайтесь поудобнее, налейте вкусного чаю и давайте обсудим довольно популярную и животрепещущую тему: оптимизацию производительности сайта.

Одним из инструментов для анализа качества и usability страницы с составлением отчёта является PageSpeed Insights (далее просто PageSpeed).

Какие вопросы я затрону в статье:

  • что такое PageSpeed;
  • как измеряется и оценивается производительность;
  • лирическое отступление: critical render path;
  • способы оптимизации PageSpeed;
  • для чего это нужно?

Читать дальше →

Утилиты для обработки JSON

Reading time4 min
Views30K

Независимо от того, взаимодействуете ли вы с API или делаете запрос в базу данных, вы, вероятно, получите данные в формате JSON. Большинство популярных языков программирования имеют встроенные возможности для обработки и анализа JSON. Однако не всё так просто, если вы работаете с данными в Bash.

По умолчанию оболочки, такие как Bash, не имеют стандартного парсера JSON. Необходимо либо использовать интерпретатор языка программирования, либо установить соответствующую утилиту. Если вы хотите ограничиться возможностями командной строки, то установка утилиты, вероятно, будет самым простым вариантом. Вам не придется настраивать интерпретатор и устанавливать дополнительные зависимости.

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

В этой статье мы рассмотрим некоторые популярные утилиты, которые добавляют эту важную функцию в вашу оболочку командной строки. Это позволит вам обрабатывать данные JSON в скриптах.

Читать далее

Грамматический разбор для естественных языков. Ч.2: Алгоритм Кока—Янгера—Касами (CYK)

Reading time8 min
Views4.7K

(Ч.1: Языки описания языков)

В идеале нам хотелось бы разбирать текст за линейное время и за один проход. Регулярные выражения это позволяют, но уже с CFG это не получится: например, S → A | B; A → a | x A; B → b | x B превращает строку x…xa в дерево из узлов A, а строку x…xb в дерево из узлов B — и пока разборщик не увидит последний символ строки, он не знает, что делать со всеми предыдущими символами. Поэтому на грамматики для языков программирования накладывают дополнительные ограничения — по сути, чтобы для разбора не приходилось "заглядывать вперёд" — позволяющие разбирать текст программы за один проход. Кто ковырялся в компиляторах, тот наверняка знаком с LL- и LR-разбором, и имеет опыт "подгонки" грамматики языка под требования конкретного алгоритма разбора. Но при работе с естественными языками нет возможности "подправить" язык для удобства разбора — приходится работать с тем языком, какой есть.

В 1960-х был разработан алгоритм CYK для разбора произвольного CFG. Считается, что впервые его опубликовали — независимо друг от друга — И. Сакаи из японского НИИ Минобороны в 1961 и Дж. Кок из Нью-Йоркского университета в 1962. В 1966 тот же самый алгоритм публиковали — опять независимо — Д. Янгер из General Electric и Т. Касами из Университета Иллинойса. Янгер в своей публикации упоминает имена Кока и Сакаи, но не ссылается ни на какие конкретные их работы: по всей видимости, работы Кока и Сакаи Янгеру — как и мне сейчас — не были доступны. Чтобы никому из изобретателей алгоритма не было обидно, его называют в честь сразу троих, хотя они, скорее всего, даже не были между собой знакомы.

Читать далее

Грамматический разбор для естественных языков. Ч.1: Языки описания языков

Reading time4 min
Views6K

Исторически первой попыткой формализовать язык и автоматизировать его разбор были регулярные выражения, придуманные С.К. Клейни в 1951. Регулярное выражение составляется из символов языка ("терминалов"), и трёх операций: конкатенация, чередование и замыкание. Для разбора регулярных выражений достаточно ДКА без памяти: разборщик знает, в каком состоянии он находится сейчас, но не помнит ничего о своих прошлых состояниях. Это значит, что языки, допускающие вложенные конструкции — например, язык вложенных скобок (n)n и язык самих регулярных выражений — невозможно описать регулярными выражениями. Естественные языки тоже допускают конструкции неограниченной вложенности ("Вот два петуха, которые будят того пастуха, который бранится с коровницей строгою, которая доит корову безрогую, лягнувшую старого пса без хвоста, который за шиворот треплет кота, который пугает и ловит синицу, которая часто ворует пшеницу, которая в тёмном чулане хранится в доме, который построил Джек."), поэтому для описания естественных языков регулярные выражения недостаточно выразительны.

Более выразительный способ описания языков — формальные грамматики — предложил Н. Чомски в 1956. Предложения на английском довольно неплохо поддаются такому описанию:

Читать далее

Нехорошее Кароси. Как не умереть от переработок?

Reading time7 min
Views19K


Говорят, на свете существует несколько вещей, которые исподволь убивают представителей вида homo sapiens — это никотин, алкоголь… и переработки. Действительно, пословицу «от работы кони дохнут» наши мудрые предки придумали неспроста: от работы может двинуть кони и человек разумный, особенно, если этой самой работы у него слишком много. Японцы даже придумали для этого специальный термин — «кароси», который означает смерть от чрезмерно высоких профессиональных нагрузок. И это явление в стране Восходящего солнца — отнюдь не редкое.
Читать дальше →

Просто игра. Не компьютерная, бумажная

Reading time2 min
Views2.8K
Обратил внимание на нередко встречающиеся статьи на тему «моя жизнь/опыт там». Штаты, Испания, OAE и т.п. Подумал что одни хабровчане уже переехали, другие намереваются, третьи решили остаться, четвёртые в раздумье — не знают что решить. Эта игра для тех, которые не уверены какое решение будет правильным. Игра касается не только переезда, а практически всего. Любого выбора. Какие фичи добавить в прогу, а какие можно и позже? Какую закуску приготовить к новогоднему столу? Да чего угодно.
Читать дальше →

Ptpython: улучшенный REPL для Python

Reading time4 min
Views11K
Возникало ли у вас когда-нибудь желание быстро испытать какую-нибудь свежую идею, прибегнув к интерфейсу командной строки Python, к REPL? Вероятно, если речь идёт об эксперименте буквально с несколькими строками кода, вам просто не захочется создавать для этого новый «блокнот» Jupyter.

Но в подобной ситуации, возможно, вас не особенно порадует и перспектива использования классической консоли Python, так как она, в отличие от Jupyter Notebook, не поддерживает автодополнение ввода и не умеет работать с документационными строками. В REPL, кроме того, нельзя, после нажатия на Enter, исправлять ошибки в коде.

Что если можно было бы превратить довольно-таки скучную командную строку Python в многофункциональный инструмент, вроде того, запись работы с которым показана ниже?


Продвинутая командная строка Python

Собственно, именно на тех, у кого возникает подобное желание, и ориентирован проект ptpython.
Узнать подробности

Сложный пароль для каждого сайта, который легко запомнить

Reading time3 min
Views10K

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

Сразу же хотел бы отметить, что я не пользуюсь смартфоном, поэтому всяческие менеджеры паролей на кнопочном телефоне для меня недоступны.

Изначально я, как и большинство пользователей, имел 1-2 пароля, которые вставлял для всех сайтов. Писать про недостатки данного способа нет смысла, их море. Со временем пришло понимание, что данный подход надо менять. Пользоваться генераторами сложных паролей на сторонних сайтах неудобно, поскольку после генерации данный пароль забывается и после истечения сессии приходится его менять. С одной стороны это хорошо, т.к заставляет нас постоянно менять пароли усложняя их подбор. Но есть сайты, где сессия заканчивается буквально за сутки, и смена их начинает раздражать.

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

Читать далее

TREX: 27-ричная симметричная система счисления

Reading time6 min
Views13K

Каждый специалист по компьютерам знает, насколько сложно работать с длинными последовательностями нулей и единиц. На помощь ему приходят восьмеричная и шестнадцатиричная системы счисления, обеспечивающие более компактное представление информации.

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

Система кодирования TREX разработана для компактного отображения симметричной троичной системы счисления при ее использовании в компьютерных системах

Читать далее

Искусство написания циклов на Python

Reading time4 min
Views97K


Цикл for — самый базовый инструмент потока управления большинства языков программирования. Например, простой цикл for на C выглядит так:

int i;
for (i=0;i<N;i++)
{
  //do something
}

Не существует более изящного способа написания цикла for на C. В сложных случаях обычно приходится писать уродливые вложенные циклы или задавать множество вспомогательных переменных (например, как i в показанном выше коде).

К счастью, в Python всё более удобно. В этом языке есть множество хитростей, позволяющих писать более изящные циклы, которые упрощают нашу жизнь. В Python вполне можно избежать вложенных циклов и вспомогательных переменных, и мы даже можем самостоятельно настраивать цикл for.

Эта статья познакомит вас с самыми полезными трюками по написанию циклов на Python. Надеюсь, она поможет вам ощутить красоту этого языка.
Читать дальше →

Процессор, эмулирующий сам себя — может быть быстрее самого себя

Reading time1 min
Views38K

Современный мир ПО содержит настолько много слоёв, что оптимизации могут быть в самых неожиданных местах. Знакомьтесь - год 2000, проект HP Dynamo. Это эмулятор процессора PA-8000, работающий на этом же процессоре PA-8000, но с технологией JIT. И реальные программы, запускающиеся в эмуляторе - в итоге работают быстрее, чем на голом процессоре.

td;dr - всё сказано в заголовке

Читать далее

Мифология REST

Reading time13 min
Views17K

Матчасть


Мало какая технология в истории IT вызывала столько ожесточённых споров, как REST. Самое удивительное при этом состоит в том, что спорящие стороны, как правило, совершенно не представляют себе предмет спора.


Начнём с самого начала. В 2000 году один из авторов спецификаций HTTP и URI Рой Филдинг защитил докторскую диссертацию на тему «Архитектурные стили и дизайн архитектуры сетевого программного обеспечения», пятая глава которой была озаглавлена как «Representational State Transfer (REST)». Диссертация доступна по ссылке.


Как нетрудно убедиться, прочитав эту главу, она представляет собой довольно абстрактный обзор распределённой сетевой архитектуры, вообще не привязанной ни к HTTP, ни к URL. Более того, она вовсе не посвящена правилам дизайна API; в этой главе Филдинг методично перечисляет ограничения, с которыми приходится сталкиваться разработчику распределённого сетевого программного обеспечения. Вот они:


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

Всё, на этом определение REST заканчивается. Дальше Филдинг конкретизирует некоторые аспекты имплементации систем в указанных ограничениях, но все они точно так же являются совершенно абстрактными. Буквально: «ключевая информационная абстракция в REST — ресурс; любая информация, которой можно дать наименование, может быть ресурсом».


Ключевой вывод, который следует из определения REST по Филдингу, вообще-то, таков: любое сетевое ПО в мире соответствует принципам REST, за очень-очень редкими исключениями.

Читать дальше →

Конечные автоматы и django

Reading time2 min
Views5K

При работе над django-проектом, есть ряд must-have сторонних библиотек, если не хочется бесконечно изобретать велосипед. Средстав отладки sql запросов(debug-toolbar, silk, --print-sql из django-extensions), что-нибудь для хранения древовидных структур, переодических/отложенных задач(кстати, cron-like интерфейс есть у uswgi. EAV всё ещё бывает нужен, хотя часто его можно заменить jsonfield. И одна из таких крайне полезных вещей, но почему-то реже обсуждаемая в сети - FSM. Не так часто почему-то сталкиваюсь с ними в чужом коде.

<cut>

Практически у каждой записи в БД есть некоторое состояние. Например, для комментария это может быть - опубликован/удален/удален модератором. Для заказа в магазине - оформлен/оплачен/доставлен/возврат и т.п. Причем переход из одного состояния в другое часто бывает размазан по коду и в нем присутствует бизнес-логика, которую надо обильно покрывать тестами(всё равно придется, но можно избежать тестирования элементарных вещей, например, что заказ может перейти в состояние "возврат денег" только после того, как он побывал в состоянии "оплачен".

Вполне логично было бы описывать такие переходы более декларативно и в одном месте. Вместе с необходимой логикой и проверкой доступа.

Вот пример кода из тестов библиотеки django-fsm

Читать далее

Альтернативный способ заполнения «спиральной матрицы»

Reading time10 min
Views43K

В процессе изучения основ алгоритмизации и программирования в качестве студента еще в середине 2000х мне попалась довольно известная всем задача по заполнению «спиральной» матрицы. Суть состоит в том, начиная с позиции [1, 1], продвигаясь по часовой стрелке, заполнить квадратную матрицу заданной величины числами в возрастающем порядке. На ее решение было потрачено около двух часов.

Читать далее

Использование TLS fingerprinting для выявления угроз

Reading time9 min
Views27K

В статье хотим рассказать про технологию TLS fingerprinting, про которую недостаточно материалов в русскоязычном сегменте. Попробуем это исправить. Статья частично переводит тематические материалы авторов описываемых методов (тут и тут), а также содержит описание практической реализации от Акрибии.

Не будем глубоко погружаться в детали работы SSL/TLS (далее будем говорить TLS), но кратко поясним детали.

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

Чтобы инициировать сеанс TLS, клиент отправляет «пакет» приветствия серверу после трёхстороннего установления связи TCP. Этот «пакет» и способ его создания зависят от пакетов и методов шифрования, используемых при создании клиентского приложения. Если сервер принимает соединение TLS, он ответит пакетом приветствия, тем самым продолжая согласование шифрования.

Читать далее

WebUSB. Прошейся из браузера

Reading time3 min
Views19K


Разработчики хромиума постоянно пилят огромное количество классных API для разных технологий и железяк. Тут и Web Share, и работа со звуком, Bluetooth, NFC, WebOTP и много чего ещё, более-менее полный список со статусами реализации можно посмотреть здесь. Но больше всего среди них впечатляет WebUSB API, о настоящих возможностях которого я узнал совсем недавно. Оказывается, с его помощью можно не только открывать странички с подключенных устройств, но и прошивать их. Это открывает новый крутейший сценарий работы со всякой мелкой электроникой.
Читать дальше →

Сокрытые драгоценности Python

Reading time5 min
Views27K

Особенности Python,  о которых я даже не подозревал

Автор оригинала: Чарудатта Манваткар

В последнее время у меня появилось новое хобби – чтение документации Python просто для удовольствия! Когда вы читаете на досуге, то, как правило, замечаете интересные «лакомые кусочки», которые пропустили бы в противном случае. Итак, вот перечень «кусочков», которые заставили меня сказать:

О! Вы можете сделать это на Python?

Читать далее

Information

Rating
6,158-th
Registered
Activity