Реклама
22 января 2017 г. 8:05

DjangoDjango - Урок 019. Настройка HTTPS протокола на сайте от Let`s Encrypt

SSL, HTTPS, Nginx, Django, letsencrypt

Вчера получил письмо счастья от Google , поскольку пользуюсь Google Search Console для отслеживания индексации сайта в поисковике Google. Суть письма заключается в том, что Google Chrome будет сообщать о небезопасности сайта, который использует протокол http на тех страницах, где требуется ввод пароля. А если учесть, что на моём сайте форма авторизации располагается на всех страницах, то значит предупреждение будет на всех страницах сайта. Не самая приятная ситуация, поэтому пришлось быстренько доставать сертификат SSL и настраивать https.

На данный момент существует центр сертификации Let`s Encrypt , который выдаёт бесплатные сертификаты сроком на 90 дней. Данный центр сертификации поддерживается такими организациями, как Electronic Frontier Foundation (EFF), Mozilla Foundation, Akamai, Cisco Systems.

Процесс получения и установки сертификата автоматизирован, но в случае с сайтом, работающем на Django и Nginx , нужно будет дополнительно поработать над настройками сервера Nginx .

15 января 2017 г. 11:49

PyQt5PyQt5 - Урок 004. Использование QSettings

PyQt5, QSettings, Qt, python

Ознакомимся с использование QSettings в PyQt5. Для этого предлагаю написать небольшое приложение, в котором будет один единственный чекбокс, состояние которого мы будем сохранять в настройках. Состояние чекбокса будет сохраняться по клику на данный чекбокс. После закрытия программы и повторного его открытия чекбокс будет выставлен с тем состоянием, в котором он был при закрытии программы.

13 января 2017 г. 14:15

QtQt/C++ - Урок 058. Подсветка синтаксиса HTML кода в QTextEdit

HTML, QSyntaxHighLighter, Qt, QTextEdit, QTextDocument

Некоторое время назад я занимался изучением подсветки синтаксиса в QTextEdit и практиковался на подсветке для HTML кода. В результате удалось сделать довольно неплохой вариант подсветки синтаксиса HTML кода, но в связи с тем, что есть вероятность того, что этот код не будет мною применён где-нибудь, я решил выложить данный пример программного кода.

Подсветка синтаксиса HTML в QTextEdit будет выглядеть следующим образом:

9 января 2017 г. 14:45

DjangoDjango - Урок 018. Блокировка злоумышленников по IP при попытках подбора пароля на Django

IP, брутфорс, подбор пароля, блокировка, Django, brute force

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

Предлагаю такой вариант блокировки: при трех неудачных попытках ввода пароля IP блокируется на 15 минут, если такая блокировка на 15 минут происходит 3 раза, то IP блокируется на 24 часа.

Для реализации блокировки понадобится модель, в которой будет находится 4 поля:

  • IP адрес;
  • Количество попыток ввода пароля;
  • Время разблокировки;
  • Статус блокировки - True - если заблокирован, False - если не заблокирован.

Сразу покажу результат работы блокировок в админке сайта, за пару месяцев уже накопилась небольшая коллекция.

7 января 2017 г. 13:20

DjangoDjango - Урок 017. Кастомизированная страница авторизации на Django

Django, login, авторизация

Для того, чтобы сделать оформление страницы авторизации в едином стиле с оформлением всего сайта, можно подготовить шаблон оформления и подменить шаблон url, чтобы отдавать требуемое нам представление страницы с требуемым шаблоном. Также это может быть полезно для внедрения функционала блокировок от подбора пароля и более интеллектуального перенаправления пользователя на страницы сайта после авторизации в зависимости от того, имеет ли пользователь статус персонала или нет.

Для работы с авторизацией пользователей предлагаю использовать отдельное приложение/модуль, который будет называться accounts.

Форму авторизации писать не требуется, поскольку можно воспользоваться стандартной формой AuthenticationForm , которую необходимо будет использовать в шаблоне страницы авторизации.

Структура модуля accounts

accounts/
    templates/
        accounts/
            login.html
            login_widget.html
    __init__.py
    admin.py
    apps.py
    models.py
    special_func.py
    urls.py
    views.py

В данном модуле используется два шаблона:

  • login.html - это шаблон для страницы авторизации
  • login_widget.html - это шаблон для виджета авторизации, который может быть помещён на любой странице сайта, чтобы пользователь мог авторизоваться не только со страницы авторизации, но и с любой страницы со статьёй, например.

Файл special_func.py содержит некоторые полезные функции, как например, получение предыдущего Url из запроса , чтобы перенаправить пользователя обратно на страницу, где пользователь авторизовался.

5 января 2017 г. 13:21

QtQt/C++ - Урок 057. Ошибки вывода qDebug() для чисел с плавающей точкой

Qt, qDebug, float

При разработке программного обеспечения на Qt довелось столкнуться с одним нюансом при выводе чисел с плавающей запятой через qDebug(). Проблема заключается в том, что выводятся не все символы после запятой. Тем же самым грешит и вывод std::cout .

Подобный user case может возникнуть в следующей ситуации:

У вас имеется объект QString, который содержит некое число "8564.26495574", которое мы переводим в число с плавающей точкой с помощью метода toDouble(), и проверяем результат с помощью вывода qDebug() , но вот незадача, вывода оказывается ложным.

QString str("8564.26495574");
qDebug() << str.toDouble();

// В выводе получаем -> 8564.26

Хотя на самом деле мы получаем совершенно правильное число, то есть из строки было получено число 8564.26495574 , просто вывод qDebug() показывает округлённый результат.

Тоже самое можно наблюдать, если попытаться просто вывести значение числа double в qDebug().

double a = 8564.26495574;
qDebug() << a;

// В выводе получаем -> 8564.26
5 января 2017 г. 12:47

DjangoDjango - Урок 016. Вывод списка популярных статей на любой странице сайта

Django, templatetags, список популярных статей, Python

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

У себя я решил эту проблему с использованием собственного тега , который может быть использован в шаблоне Django. То есть, вместо того, чтобы в каждом View на сайте прописывать один и тот же код для получения списка статей или использования одной и той же функции в этих View, я просто сделал отдельный шаблон с уже готовой разметкой для списка популярных статей, в котором используется мой пользовательский тег, которым я забираю список этих статей. Таким образом, нужно только внедрять данный шаблон в нужном месте в шаблоне страницы с помощью тега include.

4 января 2017 г. 6:27

Карьера и бизнес в ITПрограммирование - Индивидуальное предпринимательство и работа с зарубежными заказчиками

ИП, валютный контроль, договор

После того, как мы обсудили налоговые послабления в виде налоговых каникул для индивидуальных предпринимателей, которые только начали свой профессиональный путь и были впервые зарегистрированы в качестве ИП, давайте обсудим вопрос внешнеэкономической деятельности. Например, Вы нашли заказчика из-за рубежа, которого устроили ваши профессиональные навыки, и он хочет заключить с вами договор оказания услуг по разработке программного обеспечения или просто консультирования в данной области.

Что для этого требуется и какие шаги необходимо предпринять, чтобы деньги за работу дошли до вашего кошелька?

Итак, план действий может быть следующий:

  1. Валютный расчётный счёт и транзитный счёт Индивидуального Предпринимателя
  2. Договор с заказчиком
  3. Подписание актов выполненных работ
  4. Выставление счетов
  5. Получение оплаты выполненных работ на транзитный счёт
  6. Распоряжение о распределении средств с транзитного счёта на ваш валютный расчётный счёт

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

30 декабря 2016 г. 5:30

DjangoDjango - Урок 015. Получение IP адреса и предыдущего URL из запроса

HTTP, referer, Django, IP

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

IP адрес может быть как реальным, так и переданным через прокси-сервер (в данном случае будет передаваться заголовок HTTP_X_FORWARDED_FOR , по которому можно извлечь истинный IP адрес).

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[-1].strip()
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip
27 ноября 2016 г. 17:13

PyQt5PyQt5 - Урок 003. QSystemTrayIcon - Как свернуть приложение в трей

PyQt5, Pycharm, Qt, QSystemTrayIcon

Аналогичная статья на Qt/C++

Одной из первых статей по работе с Qt была статья по работе с QSystemTrayIcon . А теперь настал черёд аналогичного материала, но уже на Python с применением библиотеки PyQt5.

В данной статье будет рассмотрено, как написать простейшее приложение на PyQt5, которое будет сворачиваться в системный трей как при нажатии пунктов меню в иконке системного трея, так и при нажатии кнопки закрытия окна.

Структура проекта в данном случае минимальна. Будет всего лишь один файл, который и будет запускаться. То есть файл __main__.py .

Само приложение будет выглядеть следующим образом.

Если чекбокс отмечен, то приложение будет сворачиваться в трей, в противном случае приложение будет завершаться. Помимо этого имеется возможность сворачиваться приложение в трей с помощью контекстного меню иконки приложения в трее.

Реклама
  • JaJay
  • 17 декабря 2017 г. 5:16

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

  • Результат 58 баллов
  • Очки рейтинга -2
  • JaJay
  • 17 декабря 2017 г. 4:55

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

  • Результат 93 баллов
  • Очки рейтинга 8
  • JaJay
  • 17 декабря 2017 г. 4:48

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

  • Результат 66 баллов
  • Очки рейтинга -1
Последние комментарии
  • EVILEG
  • 7 декабря 2017 г. 9:47

Django - Урок 011. Добавление комментариев на сайт с Django

Визуальный пример чего? комментариев? При ответе на конкретный комментарий рядом с ником отвечающего будет стрелочка и указание ник другого пользователя. Который будет ссылкой на коммента...

  • Bernar
  • 7 декабря 2017 г. 9:24

Django - Урок 011. Добавление комментариев на сайт с Django

есть визуальный пример ?

  • EVILEG
  • 6 декабря 2017 г. 11:30

Django - Урок 011. Добавление комментариев на сайт с Django

Да, так будет даже лучше, я на сайте уже обновил до такого вида код Вот это уже не нужно if request.method == 'POST': Поскольку Вы и так используете метод post, то есть эта про...

  • Bernar
  • 6 декабря 2017 г. 11:19

Django - Урок 011. Добавление комментариев на сайт с Django

сделал немного по другому class EArticleView(View): template_name = 'knowledge/article.html' comment_form = CommentForm def get(self, request, *args, **kwargs): ...

Сейчас обсуждают на форуме
  • EVILEG
  • 16 декабря 2017 г. 17:23

Пауза в многопоточности

QFuture, который возвращается QtConcurrent::map имеет методы pause() и resume() и теоретически должен поддерживать этот функционал. Но для Qt...

  • Миша
  • 15 декабря 2017 г. 11:26

Как найти в QVector макс и мин

Спасибо

  • Galant
  • 14 декабря 2017 г. 19:58

LPT

Понял! Спасибо!

  • EVILEG
  • 14 декабря 2017 г. 13:38

QCustomPlot можно ли построить прерывистую линию на одном графике?

Во-первых: В pro файле проект по идее достаточно указать следующий define для включения возможности рендеринга через OpenGL DEFINES += QCUSTOMPLOT_USE_OPENGL И во вторых:...

  • EVILEG
  • 13 декабря 2017 г. 8:05

В многопоточности выполнять действие только в одном из потоков

Статическиe методs QThread::currentThread(); и QThread::currentThreadId() могут возвращать указатель на поток и его handle id соответственно. Можете попробовать через как...