Category index for “django”
SQLALchemy vs Django ORM
Если большую часть времени вы работаете с Django ORM и вам надо перейти на SQLALchemy - то вы встретите ряд концептуальных отличий. В этом посте опишу часть из них, на мой взгляд заметных больше всего.
Все примеры для SQLAlchemy буду приводить в асинхронном коде, в контексте PostgreSQL. Версия Django - 4.2, SQLALchemy - 2.0.
Полные примеры можно найти тут https://github.com/st4lk/sqlalchemy-vs-django-orm, в тексте для краткости код приведен не полностью.
Ловушка при подсчете связанных объектов в Django
Задача: для каждого объекта подсчитать количество связанных объектов, удовлетворяющих определенному условию.
Django: сигнал или метод модели?
Когда нужно написать какой-либо функционал, который должен быть выполнен при сохранении django модели, у меня всегда возникал вопрос - где его лучше реализовать. В сигнале или в методе
save()
модели? Давайте разберемся, что и в каких ситуациях более удобно.Пробуем JSON в Django и PostgreSQL (и сравниваем с MongoDB)
В Django 1.9 будет добавлено поле JSONField, его можно использовать с базой данных PostgreSQL >= 9.4. Давайте попробуем с ним поработать и оценить, насколько оно удобно.
OAuth и django rest framework
Тема избитая, но мне не удалось найти готового решения, которое полностью бы меня устроило. Поэтому пишу сам :).
Итак, у нас есть “одностраничный” веб сайт, который общается с бекендом посредством REST API. Клиентская часть может быть написана с помощью ember, angularjs или чего-то подобного. Бекенд - django rest framework (DRF). И есть тривиальная задача - добавить вход через социальные сети (OAuth протокол).
Отладка SQL в django тестах
В django тестах можно замерять количество сделанных SQL запросов:
def test_home(self): with self.assertNumQueries(1): response = self.client.get('/') self.assertEqual(response.status_code, 200)
Если код в контексте
assertNumQueries
сделает иное количество обращений к БД, чем ожидается (здесь 1), то тест выдает ошибку. Но когда такой тест не проходит, бывает трудно определить лишний отправленный запрос. Для отладки такого случая удобно вывести в консоль отправленные SQL запросы. Далее опишу, как этого добиться.Подключение celery к django
Для подключения celery к новому проекту так или иначе приходится подглядывать в предыдущие, чтобы вспомнить необходимые шаги: какие настройки задавать, как запускать, как останавливать и т.д.
Хочу собрать все в одном месте.
Вложенные SQL запросы в Django
Вы знали, что Django ORM умеет делать вложенные SQL запросы? К своему стыду я узнал это не так давно.
Отправка писем в django проекте с помощью сервиса mandrill
Отправлять email сообщения с сервера можно просто по SMTP протоколу. Но есть другой способ - через специальные сервисы рассылки. Про один такой, mandrill.com, я немного расскажу.
Django проект: с нуля до работающего сервера
В этом посте хочу описать свой опыт создания и запуска django проекта на VPS-хостинге.
Разделим задачу на этапы:
- Создание django-проекта
- Настройка деплоя
- Настройка сервера (установка нужных библиотек)
- Деплой проекта
Настройки логов для django
Рассмотрим дефолтные настройки логов в django и попробуем их сделать максимально удобными.
Вот что есть в settings.py после команды
django-admin.py startproject project_name
(django 1.5):Кеширование queryset.count в django
Как-то обнаружил, что у меня идут несколько одинаковых запросов вида
SELECT COUNT(*) ...
. Оказалось (да, для меня это было новостью :) ), что методqueryset.count()
в джанго кешируется по особому. Но лучше начать рассказ издалека.Парсинг 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']}
Оптимизация админки django
Как известно, чем меньше запросов к базе данных делает сайт, тем лучше производительность. Обычно админка - часть сайта с меньшим трафиком, но все же хорошо, если от туда не идут лишние запросы. Это и приятней в пользовании, т.к. страница отдается быстрее, и все-таки разгружает сервер.
В этом посте я рассмотрю некоторые способы уменьшения количества запросов из админки к БД при использовании
__unicode__
, содержащего поля связанного объекта (ForeignKey). Думаю, глядя на примеры станет понятнее.Многоязычный сайт на django без редиректов
Начиная с django 1.4, можно задать префикс для url для каждого включенного языка. К примеру, мы хотим сайт, который будет иметь русскую и английскую версию.
Для этого добавляем в
settings.py
:MobileESP: Скрипт определения мобильного устройства посетителя
Скрипт полезен, если вы хотите показывать разные версии сайта для обычных компьютеров и мобильных устройств. Большое количество методов для определения вида девайса. Доступен на разных языках программирования, включая python. Собственно порт на python был написан мной по просьбе freelance заказчика.
Отладка django проекта с помощью встроенного python отладчика pdb
Я использую sublime-text в качестве редактора python кода. В нем нет встроенного отладчика, поэтому для отладки django проектов я в основном делал так:
print var_name
и в консоле локального сервера смотрел вывод команды. Я использую этот метод и сейчас, но иногда хочется пройтись по коду по шагам, посмотреть все переменные.
Это можно сделать с помощью встроенного python отладчика pdb:
import pdb; pdb.set_trace()