Реклама
20 сентября 2016 г. 23:20

Django - Урок 005. Добавление RSS ленты на сайт с Django

РуководствоDjangoRSS, Feed, Python1639

Пока статей ещё не много на новом сайте, добавлю-ка я RSS-ленту , благо, что Django имеет встроенный функционал для организации RSS-лент, как в обычном формате, так и в формате Atom. Но для начала ограничусь добавлением обычно ленты новостей, которая может быть подключена к сервису FeedBurner, а также найдена на сайте каким-нибудь RSS-Ридером. Я, например, использую QuiteRSS , который, к слову говоря, написан на Qt5.

Что требуется для организации RSS-ленты в минимальном варианте:

  1. Добавить ссылку на ленту в тело head -тега страницы;
  2. Написать представление, которое будет отвечать за подготовку ленты;
  3. Модифицировать модель, по объектам которой будет строиться лента новостей.
18 сентября 2016 г. 18:48

Django - Урок 004. Подключение Bootstrap 3 к сайту на Django

РуководствоDjangoBootstrap3404

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

Давайте посмотрим, как обстоит дело с Bootstrap 3 в Django .

18 сентября 2016 г. 13:41

Django - Урок 003. Модель, шаблон и представление в Django

РуководствоDjangomodel, template, view2129

В Django используется модульная система приложения, когда одно приложение состоит из нескольких приложений, отвечающих каждое за свой функционал. Как Вы успели заметить, на момент написания статьи, на сайте присутствует раздел "База Знаний", в котором присутствует несколько разделов, по которым уже разделены статьи.

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

Предлагаю разобраться, как это реализуется в минимальном варианте на примере EVILEG COM.

17 сентября 2016 г. 1:25

Django - Урок 002. Подсветка синтаксиса кода на сайте

РуководствоDjangoPrettyPrint, SyntaxHighlighting1180

Самым большим головняком при начале написания сайта с нуля на Django была подсветка синтаксиса кода. Ладно, на Wordpress был плагин, который справлялся со своей задачей, хоть и подгружал немного сайт, поскольку подсветка организовывалась на стороне сервера. Но в случае с новым сайтом пришлось уже задуматься на эту тему.

Сначала выбор стоял на тему того, где именно будет организовываться подсветка синтаксиса:

  • На стороне сервера
  • Или на стороне клиента

Поискав информацию, выяснил, что для организации синтаксиса на стороне сервера готовых решений не так уж и много, например Geshi , да и всё пожалуй, что работает на Python . Да и тот может нагружать сервер, если есть косяки в кешировании.

А вот с подсветкой синтаксиса на стороне клиента стало уже поинтереснее. Тут например и Hightlight.js и SyntaxHighlighter, и легковесный скрипт от корпорации добра Google, Javascript Code Prettifier, на него выбор и пал. Тем более, что он используется на таком известном ресурсе, как Stack Overflow.

16 сентября 2016 г. 23:56

Django - Урок 001. Развёртывание сайта на Django + PostgreSQL + Gunicorn + Nginx

РуководствоDjangoDjango, PostgreSQL, Gunicorn, Nginx, Ubuntu4282

После того, как доступ к серверу с Ubuntu 16.04 был настроен в одной из предыдущих статей , настало время развернуть на нём всё необходимое для работы сайта, а именно:

  • Django - фреймворк для разработки web-приложений на языке Python;
  • PostgreSQL - базу данных SQL ;
  • Gunicorn - WSGI HTTP сервер на Python для UNIX систем;
  • Ngnix - HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения;
  • Supervisor - это менеджер процессов, который существенно упрощает управление долго работающими программами, в частности сайтами, которые необходимо автоматически перезапускать после падений.
16 сентября 2016 г. 11:38

Исправление кодировки базы данных PostgreSQL с LATIN1 на UTF8

РуководствоPostgreSQLPostreSQL, UTF8, LATIN1, Ubuntu1801

В процессе настройки сервера для сайта, пришлось столкнуться с некоторыми проблемами. В частности с проблемой кодировки базы данных PostgreSQL. Дело в том, что при установке PostgreSQL, шаблоны баз данных создавались с кодировкой LATIN1, а сайт работает на Django, с использованием кодировки UTF8. В результате, при попытке вставки данных выпадала следующая ошибка:

ERROR: encoding UTF8 does not match locale en_US Detail: The chosen LC_CTYPE setting requires encoding LATIN1.

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

14 сентября 2016 г. 23:18

Первоначальная настройка доступа к VDS на Ubuntu 16.04

РуководствоLinuxLinux, VDS, Ubuntu1563

В связи с развитием ресурса EVILEG, было принято решение по плавному переезду на домен COM, а также переводу сайта с CMS Wordpress на фреймворк Django. С Ruby On Rails как-то не заладилось, а вот с Django процесс пошёл практически сразу.

Выбирать другой хостинг я не стал, и остался с текущим хостингом TIMEWEB , кстати рекомендую тем, кто ещё не определился со своим будущим хостингом VDS.

А теперь приступим к первоначальной настройке доступа к VDS, который предоставляет TIMEWEB.

3 сентября 2016 г. 21:03

PyQt5 - Урок 002. Hello World на PyQt5

РуководствоPyQt5PyCharm, PyQt5, qt, qt уроки, qt58338

Python — это высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода, как говорит нам Википедия. А также активно используется для написания Web-приложений. Ну а для работы с Qt для Python была разработана компанией Riverbank Computing библиотека PyQt5, которая является набором "привязок" к библиотеке Qt5.

Из интереса, я решил написать небольшой Hello World с использованием PyQt5.

Установка

Первым делом устанавливаем Python, в моём случае это Python 3.5.2.

Для Windows можно скачать установочный пакет с официального сайта Python . Для Linux можем воспользоваться стандартным менеджером пакетов.

Далее необходимо установить PyQt5. В случае Linux можно либо установить с помощью стандартного менеджера пакетов. Например, для deb-based дистрибутивов:

sudo apt-get install pythonpython3-pyqt5 pyqt5-dev-tools

Либо установить сначала утилиту pip для установки пакетов Python:

sudo apt-get install python-pip

И уже произвести установку с помощью данной утилиты, что будет аналогично как для Windows, так и для Linux систем:

pip install PyQt5

Для разработки на Python была выбрана IDE PyCharm.

28 августа 2016 г. 21:17

Qt/C++ - Урок 055. QSignalMapper VS лямбда функции

РуководствоQtQt, C++, lambda, QSignalMapper, лямбда функция3487

QSignalMapper является замечательным классом, чтобы организовать работу сигналов и слотов для динамически создаваемых объектов. Например, динамически создаваемых кнопок или объектов в QStackedWidget. Особенно это было актуально в устаревших версиях программного обеспечения, то есть базировавшегося на Qt 4.8 , где система сигналов и слотов строилась на применении макросов. Но в текущих реалиях новый синтаксис на указателях значительно более удобен, а также поддерживает лямбда функции, что может позволить и вовсе избавиться от применения QSignalMapper, который будет выглядеть как монструозный атавизм в новых проектах, которые используют последние версии фреймворка Qt и стандартов языка C++ .

А если учесть ещё и перегрузку map() и mapped() , то это делает код с QSignalMapper ещё более страшным, если использовать коннекты сигналов и слотов с использованием указателей, поскольку необходимо кастовать как сигналы, так и слоты, но об этом чуть позже.

Поэтому давайте рассмотрим небольшой проект, который будет основываться на примере из официальной документации Qt. А именно, пример будет следующий. У нас имеется QLabel, QPushButton и Vertical Layout . По нажатию кнопки в Vertical Layout будут добавляться другие динамические кнопочки, по нажатию на которые в QLabel будет отображаться текст с номером кнопки в следующем виде: "Button 2". На ниже следующем рисунке показан пример данного приложения, внешний вид которого не будет отличаться, тогда как реализаций программного кода будет несколько.

28 августа 2016 г. 21:08

Qt/C++ - Урок 054. Считывание данных из файла CSV и их представление через QStandardItemModel

РуководствоQtCSV, QStandardItemModel, Qt, QTableView4039

Формат данных CSV ( Comma-Separated Values — значения, разделённые запятыми), является простейшим форматом представления табличных данных. Данный формат поддерживается Excel и многими другими офисными пакетами. Например, я часто сталкиваюсь с данным форматом, когда делаю выгрузку статистики по сайту из панели вебмастера Google Search Console.

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

BMW;X5;3000000
Lada;Kalina;250000

Разбор CSV

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

Возьмём за основу выше приведённый пример содержимого CSV файла, который был создан в Microsoft Excel:

И отобразим его в QTableView через QStandardItemModel:

Реклама
  • BoostEX
  • 17 августа 2017 г. 16:45

C++ - Тест 001. Первая программа и типы данных

  • Результат - 73 баллов
  • Nordman
  • 15 августа 2017 г. 20:40

C++ - Тест 005. Структуры и Классы

  • Результат - 66 баллов

C++ - Тест 002. Константы

  • Результат - 33 баллов
Последние комментарии
  • EVILEG
  • 17 августа 2017 г. 18:33

Qt/C++ - Урок 069. Шифрование методом XOR

Не обратил внимания на это, Проверял с большим текстом.. По идее не должно.

Qt/C++ - Урок 069. Шифрование методом XOR

Шифрует/дешифрует текст от 8 символов, так и должно быть?

  • EVILEG
  • 15 августа 2017 г. 20:32

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

Нууу... тут уже вопрос к самому Qt4.8. Если честно, идей нет, да и копаться в deprecated коде желания тоже нет.

  • t000r
  • 15 августа 2017 г. 19:49

Qt/C++ - Урок 048. QThread - работа с потоками с помощью moveToThread

В qt5.6 всё нормально заработало. С 4.8 - нет

  • EVILEG
  • 15 августа 2017 г. 17:44

Qt/C++ - Урок 050. Логирование событий Qt приложения в текстовый файл

Я полистал информацию в интернетах, вроде как кто-то пытается подружить его с Qt5, но успешных результатов не нашёл. Да и на сайте как-то не заметно информации о том, что конкретно ему нужно, ...

Сейчас обсуждают на форуме
  • EVILEG
  • 19 августа 2017 г. 17:47

Проблемы с памятью

Добрый день! При работе со StackView, когда вы делаете push страниц, они постоянно добавляются и добавляются. Они не должны в данном случае удаляться, если вы просто пушите страницы в Sta...

  • MinusNol
  • 18 августа 2017 г. 16:22

WINAPI и Qt.

Да, покопаюсь. С WINAPI плохо знаком :) Но я уже существенно улучшил свой код благодаря вашему совету, благодарю вас :)

  • alex_lip
  • 18 августа 2017 г. 13:50

Я только учусь..(как правильно присвоить значение объекту другого класса)

хм. Похоже файл где-то в кэше остался. Я его второй раз  не прикреплял.

Сборка Qt / C++ проекта под windows и linux

нет, я тут кое что попробую- о результатах скажу)))

  • EVILEG
  • 16 августа 2017 г. 13:38

Перевод кодировки строки из windows 1251 в Utf-8

Здесь необходимо использовать QTextCodec. Вещь это очень хитрая в том плане, что объект этого класса необходимо создавать с определённой кодировкой. Поскольку он будет гонять данные от заданной код...