JavaScript

В то время как большая часть ядра Django - это Python, приложения admin и gis содержат код JavaScript.

Пожалуйста, следуйте этим стандартам кодирования при написании JavaScript кода для включения в Django.

Кодовый стиль

  • Пожалуйста, соблюдайте стиль отступов, продиктованный в файле .editorconfig. Мы рекомендуем использовать текстовый редактор с поддержкой EditorConfig, чтобы избежать проблем с отступами и пробелами. Большинство файлов JavaScript используют 4 пробела для отступов, но есть и исключения.
  • При именовании переменных используйте camelCase вместо underscore_case. В разных файлах JavaScript иногда используется разный стиль кода. Пожалуйста, старайтесь придерживаться стиля кода каждого файла.
  • Используйте кодовый линтер ESLint для проверки кода на наличие ошибок и ошибок стиля. ESLint будет запущен при выполнении тестов JavaScript. Мы также рекомендуем установить плагин ESLint в вашем текстовом редакторе.
  • По возможности пишите код, который будет работать, даже если структура страницы впоследствии будет изменена с помощью JavaScript. Например, при привязке обработчика клика используйте $('body').on('click', selector, func) вместо $(selector).click(func). Это облегчает проектам расширение стандартного поведения Django с помощью JavaScript.

Исправления JavaScript

Система администрирования Django использует фреймворк jQuery для расширения возможностей интерфейса администратора. В связи с этим особое внимание уделяется производительности JavaScript в админке и минимизации общего размера медиафайлов админки. Лучшей практикой в этом отношении считается предоставление сжатых или «минифицированных» версий файлов JavaScript.

С этой целью патчи для файлов JavaScript должны включать как оригинальный код для дальнейшего развития (например, foo.js), так и сжатую версию для производственного использования (например, foo.min.js). Любые ссылки на файл в кодовой базе должны указывать на сжатую версию.

Сжатие JavaScript

Чтобы упростить процесс предоставления оптимизированного JavaScript кода, Django включает удобный Python скрипт, который следует использовать для создания «минифицированной» версии. Чтобы запустить его:

$ python django/contrib/admin/bin/compress.py
...\> py django\contrib\admin\bin\compress.py

За кулисами, compress.py - это фронтенд для Google Closure Compiler, который написан на Java. Библиотека Closure Compiler не поставляется в комплекте с Django, но будет установлена автоматически npm. Для работы библиотеки Closure Compiler требуется Java 7 или выше.

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

Тесты JavaScript

JavaScript-тесты Django можно запускать в браузере или из командной строки. Тесты расположены в каталоге верхнего уровня js_tests.

Написание тестов

В JavaScript тестах Django используется QUnit. Вот пример тестового модуля:

QUnit.module('magicTricks', {
    beforeEach: function() {
        const $ = django.jQuery;
        $('#qunit-fixture').append('<button class="button"></button>');
    }
});

QUnit.test('removeOnClick removes button on click', function(assert) {
    const $ = django.jQuery;
    removeOnClick('.button');
    assert.equal($('.button').length, 1);
    $('.button').click();
    assert.equal($('.button').length, 0);
});

QUnit.test('copyOnClick adds button on click', function(assert) {
    const $ = django.jQuery;
    copyOnClick('.button');
    assert.equal($('.button').length, 1);
    $('.button').click();
    assert.equal($('.button').length, 2);
});

За информацией о типах assertions supported by QUnit обратитесь к документации QUnit.

Выполнение тестов

Тесты JavaScript можно запускать из веб-браузера или из командной строки.

Тестирование через веб-браузер

Чтобы запустить тесты из веб-браузера, откройте js_tests/tests.html в браузере.

Чтобы измерить покрытие кода при выполнении тестов, необходимо просмотреть этот файл по HTTP. Чтобы просмотреть покрытие кода:

Тестирование из командной строки

Для запуска тестов из командной строки необходимо, чтобы у вас был установлен Node.js.

После установки Node.js, установите тестовые зависимости JavaScript, выполнив следующие действия из корня вашего Django checkout:

$ npm install
...\> npm install

Затем запустите тесты с помощью:

$ npm test
...\> npm test
Вернуться на верх