IT Блог

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

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

Проверка на наличие внешнего ключа foreign key. Ошибка DoesNotExist

Если проверить наличие внешнего ключа поля ForeignKey у экземпляра модели, которая не имеет этот внешний ключ, то выйдет ошибка: DoesNotExist, так как у модели нет этого атрибута. Это не тот случай, когда модель имеет атрибут, но его значение None, поэтому нам выводится ошибка, что атрибут не найден.

Допустим имеется класс Person, содержащий поле school, которое является внешним ключом класса School.

Пусть в базе данных существует person с id=1 без school:

person = Person.objects.get(id=1)
if person.school:
   # to do something

Получим DoesNotExist.

Используя встроенную функцию hasattr(obj, 'field'), получим False, если в БД отсутствует связь с другой...


Расстянуть текст по длине блока

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

1. Использование css-трансформации scale

Данный код позволяет менять размер шрифта в зависимости от ширины браузера:

<!-- test.html -->
<div class="test">Произвольный текст</div>
// script.js
var $window = $(window), $body = $('body'), $wrap = $('.wrap'), defaultWidth = 1000;
     
$window.resize(function () {
    $wrap.css({transform: 'scale(' + $window.width() / defaultWidth  + ')'});
    var height = $wrap.outerHeight(true);
}).resize();
/* styles.css */
.svg_test text {font-size: 72px;}

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

2. Использование параметра font-size

Есть ещё другой способ заставить шрифт растягиваться...


Ошибка 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...

Использование 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...

Оптимальная конфигурация 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, Unlink, Anchor - добавить, убрать ссылку; добавить якорь
Format - выбор формата (h1, h2 и т.д.)
Maximize - развернуть во весь экран (очень удобно...


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

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

Питоновская директория библиотек, куда устанавливаются зависимости (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:

/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...

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

Попробуйте