Сериализация QuerySets. Получить запрос в sql виде

Используя pickle для QuerySet, будет выполнен запрос к базе данных что бы загрузить данные в память для сериализации. Сериализация обычно используется перед кэшированием QuerySet или загрузкой из кеша, необходимо что бы результат был доступен для использования сразу после загрузки (чтение с базы данных занимает некоторое время, что свело бы всю пользу кэширования к нулю). Это означает что после восстановления сериализованного QuerySet, он будет содержать результат на момент сериализации, а не тот, который хранится в базе данных на текущий момент. Если вам необходимо сохранить запрос выполняемый QuerySet, что бы получить данные позже, сериализируйте атрибут query QuerySet. Позже вы можете воссоздать первоначальный QuerySet (без загрузки результата) используя такой код: >>> import pickle >>> query = pickle.loads(s) >>> qs = MyModel.objects.all() >>> qs.query = query # Получить оригинальный ‘запрос’. Атрибут query не является частью публичного API, и является частью внутреннего механизма создания запросов. Однако, поддерживает использование pickle и unpickle как показано в примере выше. Сериализация QuerySets возможна только для версии Django, которая была использована при сохранении объекта. При сериализации объекта в версии… Читать далее »

Кэширование Django. Оптимизация производительности Django проектов (часть 3)

В этой части серии мы рассмотрим важнейший подход к обеспечению высокой производительности — кэширование. Суть кэширования в том, чтобы размещать часто используемые данные в быстром хранилище для ускорения доступа к ним. Важно понять, что быстрое хранилище (например, оперативная память) часто имеет очень ограниченный объем и его нужно использовать для хранения только тех данных, которые с большой вероятностью будут запрошены. Кэш фреймворк Django Django предоставляет ряд средств для кэширования из коробки. Хранилище кэша настраивается при помощи словаря CACHES в settings.py: CACHES = { «default»: { «BACKEND»: «django.core.cache.backends.db.DatabaseCache», «LOCATION»: «my_cache_table», } } Django предоставляет несколько встроенных бекендов для кэша, рассмотрим некоторые из них: DummyCache — ничего не кэширует, используется при разработке/тестировании, если нужно временно отключить кэширование, DatabaseCache — хранит кэш в БД, не самый быстрый вариант, но может быть полезен для хранения результатов долгих вычислений или сложных SQL запросов, MemcachedCache — использует Memcached в качестве хранилища, для использования этого бекенда вам понадобится поднять сервер(ы) Memcached. Для использования в продакшене лучше… Читать далее »

Работа с базой данных. Оптимизация производительности Django проектов (часть 2)

Это продолжение серии статей про оптимизацию Django приложений. Первая часть доступна здесь и рассказывает о профилировании и настройках Django. В этой части мы рассмотрим оптимизацию работы с базой данных (модели Django). В этой части часто будет использоваться логирование SQL запросов и DDT, про которые написано в первом посте. Работа с базой данных во всех примерах будет использоваться PostgreSQL, но для пользователей других СУБД большая часть статьи также будет актуальна. Примеры в этой части будут основаны на простом приложении блога, которое мы будем разрабатывать и оптимизировать по ходу статьи. Начнем с следующих моделей: from django.db import models class Tag(models.Model): name = models.CharField(max_length=64) def __str__(self): return self.name class Author(models.Model): username = models.CharField(max_length=64) email = models.EmailField() bio = models.TextField() def __str__(self): return self.username class Article(models.Model): title = models.CharField(max_length=64) content = models.TextField() created_at = models.DateField() author = models.ForeignKey(Author) tags = models.ManyToManyField(Tag) def __str__(self): return self.title Весь код доступен на GitHub с разбивкой по тегам. Массовые изменения Массовая вставка Предположим,… Читать далее »

Получить все поля модели с его значениями Django

Для получения значений из модели Django и дальнейшего их использования и манипуляций с ними можно воспользоваться подобным простеньким скриптом. Я использовал его для создания формы фильтрации по всем полям и приводил типы к виду для html разметки: type_filter ={ ‘CharField’: ‘text’, ‘TextField’: ‘textarea’, ‘IntegerField’: ‘IntegerField’, ‘DateField’: ‘DateField’, ‘AutoField’: », ‘ForeignKey’: » } your_fields = Your_model._meta.local_fields filter = dict() for f in your_fields: if type_filter[f.get_internal_type()]: filter[f.name] = { ‘name’: f.verbose_name, ‘type’: type_filter[f.get_internal_type()] }

Как установить php5 и php7 на Ubuntu 18.04 LTS

PHP — рекурсивная аббревиатура для гипертекстового процессора. Это язык сценариев общего назначения с открытым исходным кодом, который широко используется в веб-разработке благодаря его способности встраиваться в HTML. Язык сценариев используется для написания заранее написанных программ, которые впоследствии используются для автоматизации задач. PHP-скрипты обычно используются в Linux, Unix, Windows, Mac OS и других операционных системах. Когда вы используете PHP в веб-разработке, вы можете выбрать свой веб-сервер и основную операционную систему. В этой статье описана пошаговая процедура установки версий PHP 5.6 и 7.2 на Ubuntu. После установки двух версий мы также объясним, как можно отключить одну версию и включить в системе другую версию как версию по умолчанию. Мы запустили команды и процедуры, упомянутые в этой статье, в системе Ubuntu 18.06 LTS. В этой статье мы используем командную строку Ubuntu, Terminal, для установки и настройки PHP. Вы можете открыть приложение «Терминал» через системную черту или сочетание клавиш Ctrl + Alt + t. Официальный… Читать далее »

Профилирование и настройки Django. Оптимизация производительности Django проектов

Это первая статья из серии, здесь будут рассмотрено профилирование и настройки Django. Django это мощный фреймворк используемый в множестве отличных проектов. Из коробки в нем включено много полезных батареек, которые значительно ускоряют разработку и соответственно уменьшают ее стоимость. Однако, когда проект растет и набирает аудиторию, вы неизбежно столкнетесь с проблемами производительности. В этом посте я попробую рассказать о том с какими проблемами вы можете столкнуться и как их решить. Профилирование Перед тем выполнять оптимизацию необходимо измерить текущую производительность, чтобы после оптимизации можно было сравнить результаты. Такие измерения нужно будет делать часто, после каждого изменения, так что процесс должен быть автоматизированным. Профилирование — это процесс измерения метрик проекта. Таких как: время ответа сервера, использование CPU, использование памяти и тд. Python предоставляет профайлер в стандартной библиотеке, который вполне удобно использовать для измерения производительности кусков кода. Но для профилирования целового проекта существуют более удобные решения. Логирование Самая частая проблема производительности это лишние и/или не эффективные… Читать далее »

Как правильно перенести сайт на WordPress на новый домен?

Нередко возникают ситуации, когда функционирующий сайт на движке WordPress крайне необходимо перенести на другое (новое) доменное имя. Т.е. фактическое наполнение ресурса остается, а меняется только его «обертка» – домен. При этом очень важно сохранить анатомию ресурса: ссылки, перелинковку, комментарии, работающие плагины и т.д. Более того, нужно сохранить еще и «пузомерки» PR и тИЦ. Решение проблемы требует профессионального подхода и опыта, иначе можно нанести колоссальный вред сайту, а исправление ситуации потом займет несколько месяцев. Можно условно выделить 2 этапа при переносе сайта: Перенос всего ресурса (движок, контент, БД и т.д.) на новое доменное имя. Правильная настройка 301 редиректа на старом домене. Переносим работающий WP-сайт на новый домен Первым делом нужно провести две простые операции: Зайти через протокол ftp и скопировать все содержимое с каталога, который имеет название вашего старого домена. Выполнить полный бекап базы данных, чтобы с его помощью можно было легко восстановить нужные данные. Дальше требуется «сказать» движку о том,… Читать далее »

Управление категориями товаров, тегами и атрибутами

Категории товаров Категории продуктов являются основным способом группировки продуктов со схожими функциями. Вы также можете добавить подкатегории, если хотите. Например, согласен если вы продаете одежду, у вас могут быть «футболки», «толстовки» и «брюки» в качестве категорий. Как добавлять / редактировать категории товаров Управление категориями осуществляется с экрана « Продукты»> «Категории» . Подобно категориям в ваших сообщениях в WordPress, вы можете добавлять, удалять и редактировать  категории товаров. Добавить имя . Добавить слизень  (необязательно); это URL-версия имени. Выберите Родителя, если это подкатегория. Введите описание  (необязательно); некоторые темы отображают это. Выберите тип отображения . Решите, что будет показано на целевой странице категории. «Стандарт» использует вашу тему по умолчанию. «Подкатегории» будут отображать только подкатегории. «Продукты» отображает только продукты. «Оба» будут отображать подкатегории и продукты ниже этого. Загрузить / добавить изображение  (необязательно); В некоторых темах есть страницы, на которых отображаются изображения категорий товаров, так что это хорошая идея. Витрина магазина по умолчанию отображает изображения категорий товаров в шаблоне домашней страницы. Категории также могут быть переупорядочены путем перетаскивания — этот порядок используется по умолчанию в интерфейсе всякий раз, когда категории перечислены. Это включает как виджеты, так… Читать далее »

Добавление и управление продуктами

Добавление товара Прежде чем добавить свой первый продукт, давайте познакомимся с тем, как работают категории, теги и атрибуты продукта. Категории товаров Категории товаров и теги работают так же, как обычные категории и теги, которые вы используете при написании сообщений в WordPress. Их можно создавать, редактировать и выбирать в любое время. Это можно сделать, когда вы впервые создаете продукт или возвращаетесь и редактируете его или конкретно категорию / тег. Атрибуты Они могут быть добавлены для каждого продукта, или вы можете настроить глобальные атрибуты для всего магазина (например, в многоуровневой навигации). Чтобы узнать больше, см.  Управление категориями продуктов, тегами и атрибутами. Типы продуктов После настройки атрибутов и категорий и настройки управления запасами мы можем начать добавлять продукты. При добавлении продукта, первое, что нужно решить, это тип продукта. Простой  — охватывает подавляющее большинство любых продуктов, которые вы можете продать. Простые продукты поставляются и не имеют вариантов. Например, книга. Сгруппированный  — это набор связанных продуктов, которые можно приобрести по отдельности и… Читать далее »

Фильтр товаров по атрибутам

Виджет Фильтр товаров по атрибутам, являющийся частью расширения поиска товаров WooCommerce, предоставляет фильтр атрибутов товаров для вашего магазина. Пока ваши клиенты выбирают желаемые условия, он находит подходящие товары и показывает их на странице магазина. Этот фильтр отображает условия атрибута продукта. Клиент может щелкнуть по нужному атрибуту, и на странице магазина отобразятся продукты, связанные с ним. Атрибуты продукта используются для определения конкретных характеристик самого продукта. Они могут связывать общие или индивидуальные характеристики и характеристики с одним или несколькими продуктами. Никогда не используйте категории продуктов или теги для таких вещей, как размер, цвет,  марка, форма, характеристики и т. Д. Узнайте, как использовать вместо них атрибуты продуктов и сделайте управление своими продуктами легкой задачей. Типичным примером этого может служить атрибут Color —  фильтр будет отображать различные варианты выбора цвета. В следующих примерах два виджета позволяют уточнить результаты, выбрав цвет и размер. В этом примере два виджета с фильтром предлагают выбор цвета и размера. Клиент делает первый шаг в уточнении результатов,… Читать далее »