Category index for “python”
SQLALchemy vs Django ORM
Если большую часть времени вы работаете с Django ORM и вам надо перейти на SQLALchemy - то вы встретите ряд концептуальных отличий. В этом посте опишу часть из них, на мой взгляд заметных больше всего.
Все примеры для SQLAlchemy буду приводить в асинхронном коде, в контексте PostgreSQL. Версия Django - 4.2, SQLALchemy - 2.0.
Полные примеры можно найти тут https://github.com/st4lk/sqlalchemy-vs-django-orm, в тексте для краткости код приведен не полностью.
Sublime Text и Language Server Protocol
Language Server Protocol (LSP)
Language Server Protocol (LSP) - протокол для общения между IDE и языковым сервером. Сервер предоставляет такие функции, как автокомплит, переход к функции (goto) и прочее. Т.е. когда IDE нужно показать автокомплит на языке, скажем, python - происходит запрос к специальному серверу. В ответе возвращаются необходимые данные, которые IDE уже может отобразить. Радует то, что это инициатива крупной компании - Microsoft.
Python tips & tricks
Недавно прочитал книгу Марка Лутца “Learning Python”, 5-ое издание. Привожу список самых интересных фишек (по моему мнению) оттуда, что-то вроде конспекта.
Python logging на каждый день
В процессе написания программы, скрипта, часто бывает нужно вывести какую-либо отладочную информацию или сообщить о каком-то событии. Известно, что для этих целей есть встроенный модуль logging. Однако обычно у меня бывает так: времени в обрез, а все эти настройки логов (handlers, loggers, formatters и пр.) никак не могу запомнить, и на скорую руку вставляю просто print. Потом, если скрипт используется часто или его надо отдать заказчику - хочется чтобы все эти сообщения записывались в файл для последующего анализа. И приходится все переделывать с использованием logging. Так вот, чтобы не держать в голове все настройки логирования, пишу этот пост с необходимыми для работы параметрами.
Форматирование unicode строк
Вы знали, что если одно из значений строкового выражения с оператором
%
- unicode, то вся результирующая строка будет тоже unicode?>>> "Hello, %s" % u"Alex" u'Hello, Alex' >>> "Hello, %s" % u"Алексей" u'Hello, \u0410\u043b\u0435\u043a\u0441\u0435\u0439'
Парсинг url'а, содержащего unicode параметры, используя urlparse.parse_qs
Задача: получить словарь параметров URL’a. Например, имеем адрес:
http://example.com/?key=value&a=b
и нужно получить такой словарь:
{'key': ['value'], 'a': ['b']}
Тут значения являются списками, т.к. у одного ключа может быть несколько значений:
In: http://example.com/?key=value&a=b&a=c Out: {'key': ['value'], 'a': ['b', 'c']}
Функции с изменяемыми значениями по умолчанию в python'e
В python’е значения функции по умолчанию создаются в момент выполнения инструкции def, а не при каждом вызове функции. Если значение - неизменяемый объект (например строка, целое число, кортеж), то никаких подводных камней здесь нет. А вот если объект изменяемый (например список), то есть возможность попасть в ловушку. Вот пример:
def foo(l=[]): l.append('x') return l
Казалось бы, при каждом вызове foo() будет возвращаться список [‘x’]. Но:
Скрипт для скачивания музыки вконтакте
Беглый поиск соответствующего скрипта на python’е не дал результов. В статье на хабре ссылка не работает. Решил написать свой велосипед, он доступен здесь.
Запуск (нужен установленный python интерпретатор):
python vkcom_audio_download.py
Проверял на python 2.6 и 2.7. Никаких дополнительных библиотек не требуется.
MobileESP: Скрипт определения мобильного устройства посетителя
Скрипт полезен, если вы хотите показывать разные версии сайта для обычных компьютеров и мобильных устройств. Большое количество методов для определения вида девайса. Доступен на разных языках программирования, включая python. Собственно порт на python был написан мной по просьбе freelance заказчика.
Отладка django проекта с помощью встроенного python отладчика pdb
Я использую sublime-text в качестве редактора python кода. В нем нет встроенного отладчика, поэтому для отладки django проектов я в основном делал так:
print var_name
и в консоле локального сервера смотрел вывод команды. Я использую этот метод и сейчас, но иногда хочется пройтись по коду по шагам, посмотреть все переменные.
Это можно сделать с помощью встроенного python отладчика pdb:
import pdb; pdb.set_trace()
Облачный сервис Openshift
Я знаю немного хостингов с бесплатным тарифом и с поддержкой python. Это Google App Engine и Alwaysdata. И вот недавно узнал про замечательный проект Openshift от RedHat, на котором и работает этот блог. Для начала небольшой обзор упомянутых хостингов.