IT Блог

Документации и переводы

Статьи на технические темы

Ошибка PIL: The _imagingft C module is not installed

Если возникает ошибка: The _imagingft C module is not installed, то для PIL не хватает библиотеки libfreetype.

для Linux решением может служить установка libfreetype6-dev:

sudo apt-get install libfreetype6-dev
pip uninstall pil
pip install pil

stackoverflow подсказывает, что для OS X нужно сделать симлинки:

pip uninstall PIL
ln -s /usr/X11/include/freetype2 /usr/local/include/
ln -s /usr/X11/include/ft2build.h /usr/local/include/
ln -s /usr/X11/lib/libfreetype.6.dylib /usr/local/lib/
ln -s /usr/X11/lib/libfreetype.6.dylib /usr/local/lib/libfreetype.dylib
pip install PIL

Ошибка SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS)

Ошибка "SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS)" может возникать в том случае, если вы не добавили нужный домен в ALLOWED_HOSTS в файле settings.py. Например:

ALLOWED_HOSTS = ['demo.vits.pro', 'www.demo.vits.pro']

Если же снова появляется та же ошибка, но с непонятным адресом, например "hotel.qunar.com":

Traceback (most recent call last):

  File "/home/vivazzi/demo/src/demo/env/lib/python2.7/site-packages/django/core/handlers/base.py", line 92, in get_response
    response = middleware_method(request)

  File "/home/vivazzi/demo/src/demo/env/lib/python2.7/site-packages/django/middleware/common.py", line 57, in process_request
    host = request.get_host()

  File "/home/vivazzi/demo/src/demo/env/lib/python2.7/site-packages/django/http/request.py", line 72, in get_host
    "Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): %s" % host)

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): hotel.qunar.com

То поможет блокировка...


Использование redirect для перехода на страницу с GET параметрами в Django

Бывает, есть необходимость после отправки данных с формы перейти с представления на ту же страницу (или какую-то другую), но с передачей GET параметров в строке запроса.

В простейшем случае можно поступить так:

def feedback(request):
    form = ContactForm(data=request.POST or None)

    if form.is_valid():
        # some code

        params = {'send': 'true'}

        return redirect('{}?{}'.format(reverse(feedback), urlencode(params)))

    return render(request, 'feedback_forms/feedback_minimum.html', {'form': form})

Для кого-то это, конечно, очевидно.. я же иногда теряюсь :)


Проблема с кодировкой python: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)

Если у вас Traceback показывает следующую информацию:

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 280, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 709, in __call__
    mime_type = mimetypes.guess_type(file_path)[0]
  File "C:\Python27\lib\mimetypes.py", line 295, in guess_type
    init()
  File "C:\Python27\lib\mimetypes.py", line 356, in init
    db.read_windows_registry()
  File "C:\Python27\lib\mimetypes.py", line 261, in read_windows_registry
    for ctype in enum_types(mimedb):
  File "C:\Python27\lib\mimetypes.py", line 251, in enum_types
    ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)

То решением может служить подмена функции read_windows_registry(self, strict=True) в файле C:\Python27\Lib\mimetypes.py

def read_windows_registry(self, strict=True):
        """
        Load the MIME...

Оптимальная конфигурация CKEDITOR_CONFIGS приложения ckeditor в Django

Для того чтобы сконфигурировать популярный html-редактор ckeditor под себя, нужно добавить CKEDITOR_CONFIGS в settings.py проекта. Наиболее оптимальная настройка, которой я пользуюсь:

CKEDITOR_CONFIGS = {
    'default': {
        'toolbar': [
            ['Undo', 'Redo',
             '-', 'Bold', 'Italic', 'Underline',
             '-', 'Link', 'Unlink', 'Anchor',
             '-', 'Format',
             '-', 'Maximize',
             '-', 'Table',
             '-', 'Image',
             '-', 'Source',
             '-', 'NumberedList', 'BulletedList'
            ],
            ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock',
             '-', 'Font', 'FontSize', 'TextColor',
             '-', 'Outdent', 'Indent',
             '-', 'HorizontalRule',
             '-', 'Blockquote'
            ]
        ],
        'height': 500,
        'width': '100%',
        'toolbarCanCollapse': False,
        'forcePasteAsPlainText': True
    }
}

Undo, Redo - отменить, повторить шаг
ShowBlocks - показать/скрыть блоки параграфов
Bold, Italic, Underline - сделать текст жирным, курсивным, подчёркнутым
Link,...


Где находятся логи, пути, пакеты, конфигурационные файлы пакетов в Линуксе

Список путей к разным файлам и папкам, которые мне время от времени пригождаются.

Питоновская директория библиотек, куда устанавливаются зависимости (python dist-packages):

/usr/local/lib/python2.7/dist-packages
/home/username/.local/lib/python2.7/site-packages
/proc/3817/cwd/env/lib/python2.7/site-packages/

Исполняемый файл nginx:

/usr/local/sbin

Лог cron:

Cron не имеет пути к собственным логам. Лог запуска и окончания заданий идет в syslog:

/var/log/syslog

Для вывода результата работы в файл: > path/to/file 2>&1, например:

* * * * * python /home/username/my_app/src/manage.py send_queued_mail > /home/log.txt 2>&1

Часто используемые команды shell

Когда дело доходит до администрирования системы Linux и, в частности, разворачивания сайтов на сервере, тогда встаёт вопрос об автоматизации своего труда. На помощь приходят shell скрипты. Так, например, они помогают мне делать автоматическое резервное копирование баз данных.

Вот список часто используемых мною команд.

Вывести на экран слово hello:

echo hello

Присвоить некоторое значение и вывести его на экран ($ - этот знак используется для получения значения переменной):

house_count=5
echo $house_count

word=lambada
echo $word

Записать результат выполнения в переменную:

DATE=`date +%Y%m%d`  # присвоит переменной DATE текущую дату в формате %Y%m%d (например, 20140215)
FILES=`find '/home/user/media' -type f`  # присвоит переменной FILES список...

Команды Linux

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

Операции с файлами

Копирование файла с удалённого сервера

$ scp root@site.ru:/home/somefile.txt somefile.txt

Быстрая очистка файла

$ cp /dev/null file.txt

Просмотр нагрузки системы

$ top

Настройка производительности

Просмотр сведений о системе

$ cat /etc/*release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=14
DISTRIB_CODENAME=nadia
DISTRIB_DESCRIPTION="Linux Mint 14 Nadia"
NAME="Ubuntu"
VERSION="12.10, Quantal Quetzal"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu quantal (12.10)"
VERSION_ID="12.10"

Просмотр версии ядра

$ uname -r
2.6.32-042stab076.8
$ uname -a
Linux vivazzi 2.6.32-042stab076.8 #1 SMP Tue May 14 20:38:14 MSK 2013 i686 GNU/Linux

Просмотр ограничений (лимитов) в системе

$ ulimit -a

Для изменения значения лимита, например,...


pycharm run/debug configuration. Примеры конфигураций

Конфигурации бывают нескольких видов. В моей практике распространены две:

  1. Django server - для запуска самого сайта.
  2. Python - для выполнения различных скриптов, у меня чаще всего management-команд.

Расмотрим в отдельности.

Запуск Django приложения в PyCharm (Пример конфигурации Django server)

У меня лично этот процесс происходит автоматически, то есть при открытии папки проекта (через меню "File \ Open...") PyCharm самостоятельно создаёт конфигурацию Django server с необходимыми настройками:

Если у меня открыть настройки, то он будут такими:

Атоматически распознать Django server и проставить настройки помогает структура папок проекта. У меня она выглядит следующим образом:

collect_static - папка, куда собирается вся статика на...

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

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

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц