Спам – огромная проблема с контактными формами на веб-сайтах WordPress – как веб-сайтах, которые мы разрабатываем, так и в глобальном масштабе. Contact Form 7 – это самый популярный бесплатный плагин для контактной формы WordPress. Отправка спама через контактную форму может быть огромной проблемой для веб-сайтов WordPress с высоким трафиком, получающих сотни спамовых писем каждый день. Это неудобно и затрудняет обнаружение подлинных сообщений среди спама. Комментарии могут быть огромным преимуществом для вашего блога, и есть несколько фантастических плагинов, которые улучшают функцию комментариев, встроенную в сам WordPress. Наши друзья из SoftwareFindr потратили время на изучение лучших конструкторов форм WordPress, это всеобъемлющий обзор, который стоит прочитать. Однако, независимо от того, насколько хороша ваша форма для комментариев, спам-комментарии могут заставить вас полностью отключить комментарии в своем блоге, что было бы позором. Например, один из наших клиентов веб-дизайна WordPress пожаловался на количество спама, которое они получали через контактную форму Contact Form 7. Мы протестировали ряд методов, чтобы найти лучшее решение,… Читать далее »
В современном мире информационных технологий, где все быстро меняется и развивается, выбор языка программирования для изучения может оказаться сложной задачей. Существует множество вариантов, но одним из лучших выборов для начинающего программиста является язык программирования Go. Go, разработанный в Google, обладает рядом преимуществ, которые делают его идеальным языком для новичков. Во-первых, его синтаксис прост и понятен, что облегчает изучение основ программирования. Отсутствие сложных конструкций и необходимости запоминать множество правил позволяет сконцентрироваться на основах и быстро приступить к решению задач. Во-вторых, Go стандартизирован, что означает, что код, написанный на одной машине, будет работать на других без дополнительных усилий. Это позволяет новичкам сосредоточиться на освоении языка, а не на борьбе с непредсказуемыми ошибками и нюансами среды выполнения программы. Кроме того, Go обладает мощным и простым в использовании набором инструментов для разработки. Он включает в себя компилятор, легко читаемый логировочный пакет, инструменты для создания тестов и многое другое. Это позволяет новичкам облегчить процесс разработки… Читать далее »
В современных смартфонах широко распространены датчики освещенности, которые регулируют яркость экрана в зависимости от окружающего уровня света. Однако, их возможности не ограничиваются только этой функцией. Исследователи выяснили, что датчик освещенности может быть использован для более сложных задач, включая отслеживание пользователей смартфонов. Основная идея заключается в том, что датчик освещенности может регистрировать изменения, связанные с движением и деятельностью пользователя. Например, при изменении положения смартфона или приложении, пользователь обычно покрывает датчик освещенности своим лицом или рукой, что вызывает изменение яркости экрана. Эти изменения могут быть использованы для определения активности пользователя, таких как чтение сообщений, просмотр видео или игра в игры. Однако, следует отметить, что использование датчика освещенности для отслеживания пользователей смартфонов не является эффективным методом. Первоначально, это связано с тем, что частота срабатывания датчика ограничена и не всегда может точно определить активность пользователя. Кроме того, существует множество других факторов, влияющих на яркость экрана, таких как автоматическая настройка яркости и наличие закрытого корпуса… Читать далее »
Как создать фиксированный заголовок при прокрутке Для удобства работы с сайтом часто разработчики используют фиксированную шапку сайта. Как сделать липки заголовок? достаточно просто, рассмотрим на примере: Шаг 1) добавить HTML: Пример <div class=»header» id=»myHeader»> <h2>My Header</h2> </div> Шаг 2) добавить CSS: Пример /* Style the header */ .header { padding: 10px 16px; background: #555; color: #f1f1f1; }/* Page content */ .content { padding: 16px; } /* The sticky class is added to the header with JS when it reaches its scroll position */ .sticky { position: fixed; top: 0; width: 100% } /* Add some top padding to the page content to prevent sudden quick movement (as the header gets a new position at the top of the page (position:fixed and top:0) */ .sticky + .content { padding-top: 102px; } Шаг 3) добавить JavaScript: Пример // When the user scrolls the page, execute myFunction window.onscroll = function() {myFunction()};// Get the header var header = document.getElementById(«myHeader»); // Get the offset position of the navbar var sticky = header.offsetTop; //… Читать далее »
Для создания дампа БД PostgreSQL следует использовать в консоли SSH команду следующего вида: pg_dump -h hostname -U username -F format -f dumpfile dbname где: hostname — имя сервера БД; username — имя пользователя БД (совпадает с именем базы данных); format — формат дампа (может быть одной из трех букв: ‘с’ (custom — архив .tar.gz), ‘t’ (tar — tar-файл), ‘p’ (plain — текстовый файл). В команде букву надо указывать без кавычек.); dumpfile — имя создаваемого файла дампа; dbname — имя базы данных. Для баз созданных до 16.09.2019 имя хоста будет выглядеть так: pg.sweb.ru; для баз данных, которые были созданы после 16.09.2019 имя хоста будет таким: pg2.sweb.ru. После завершения задачи файл с именем dumpfile будет размещен в директории, из которой запускалась команда. Пример создания дампа базы vh36sup в файл архива формата postgress. где custom — архив, в формате самого postgress. pg_dump -h pg2.sweb.ru -U vh36sup -F c -f dump.tar.gz vhsup ИМПОРТ ДАМПА БД POSTGRESQL Для импорта необходимо использовать команду вида: pg_restore -h hostname -U… Читать далее »
Используя 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 предоставляет ряд средств для кэширования из коробки. Хранилище кэша настраивается при помощи словаря CACHES в settings.py: CACHES = { «default»: { «BACKEND»: «django.core.cache.backends.db.DatabaseCache», «LOCATION»: «my_cache_table», } } Django предоставляет несколько встроенных бекендов для кэша, рассмотрим некоторые из них: DummyCache — ничего не кэширует, используется при разработке/тестировании, если нужно временно отключить кэширование, DatabaseCache — хранит кэш в БД, не самый быстрый вариант, но может быть полезен для хранения результатов долгих вычислений или сложных SQL запросов, MemcachedCache — использует Memcached в качестве хранилища, для использования этого бекенда вам понадобится поднять сервер(ы) Memcached. Для использования в продакшене лучше… Читать далее »
Это продолжение серии статей про оптимизацию 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 и дальнейшего их использования и манипуляций с ними можно воспользоваться подобным простеньким скриптом. Я использовал его для создания формы фильтрации по всем полям и приводил типы к виду для 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()] }
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. Официальный… Читать далее »