Evgenii Legotckoi
Evgenii Legotckoi23 червня 2017 р. 04:12

Django - Підручник 025. Набір корисних батарейок Django

Зручність розробки на Django полягає не тільки в тому, що це вже досить розвинений Framework з багатим функціоналом, але й у наявності великої кількості якісних батарей (пакетів), які реалізують необхідний функціонал, писати який самостійно було б досить важко, особливо якщо ви займаєтеся розробкою сайту наодинці.

У процесі ось уже більше піврічної розробки сайту на домені COM підібрався саме такий комплект, який значно полегшує життя і прискорює розробку:

  1. django-ckeditor
  2. django-autocomplete-light
  3. django-tagging
  4. django-bootstrap3
  5. django-modeltranslation
  6. django-daterange-filter
  7. django-phonenumber-field
  8. django-rest-framework

django-ckeditor

CKEditor є WYSIWYG редактором HTML тексту з великою кількістю плагінів. Це була перша батарея, яку я додав на сайт. Оскільки статті зручніше писати за допомогою редактора, а не враховувати всю потрібну верстку, прописуючи всі теги.

Крім редагування CKEditor надає можливість завантажувати зображення.

Але в майбутньому я планую забрати використання CKEditor на сайті. Пов'язано це з кількома моментами, які мені не подобаються у його роботі:

  1. Рендеринг CKEditor здійснюється після завантаження сторінки, тобто користувачеві доводиться чекати на завантаження сторінки та ініціалізації редактора на сторінці.
    Якщо на сайті не використовується активно можливість коментування статей, матеріалів тощо, то це не критично, але в моєму випадку хочеться зробити акуратно вбудовані форми коментування без зайвого функціоналу.
  2. При переміщенні форми з редактором по сторінці за допомогою JavaScript або бібліотек (наприклад, jQuery) у CKEditor відключаються кнопки. Швидше за все, потрібна повторна ініціалізація редактора, але на мій погляд це повністю вбиває його корисність при таких User Case. Подібну поведінку форми відповідей та коментарів Ви можете спостерігати на форумі сайту. Коли користувач вибирає відповідь, яку хоче прокоментувати, форма відповіді переміщується під цю відповідь, що робить користування сайтом трохи зручнішим, дозволяючи не перегортати сторінку від форми до відповіді.
  3. Додавання відео з YouTube, додавання зображень тощо. Так - цей функціонал є у CKEditor, але його налаштування та більш складне використання з прив'язкою завантажених зображень до користувача, який їх завантажив, буде рівнозначно написанню нового функціоналу та плагінів, що за трудомістками може виявитися навіть більше, ніж написання додаткового вікна завантаження зображень до власного самописного WYSIWIG. Цей функціонал передбачається на сайті у майбутньому, але я не бачу його у спільному використанні з CKEditor.
  4. Дизайн CKEditor. Щоб налаштувати дизайн цього редактора, доведеться написати окрему таблицю стилів, що також додаткова робота, яка потребує окремої підтримки. Ці трудовитрати можна також направити на написання свого WYSIWIG

Підведемо підсумок. CKEditor незамінний при початковому запуску сайту, де потрібно редагування тексту, але при розвитку ресурсу, особливо якщо є великі плани, варто продумати написання власного редактора та відмовитись від CKEditor`а.

django-autocomplite-light

При розростанні контенту на сайті управління та пошук потрібної інформації стає складним. Тому автодоповнення для полів у формах стає незамінним. Найбільш корисною батареєю для такого функціоналу стає django-autocomplite-light.

Ця батарея дозволяє використовувати автодоповнення для:

  • Звичайні поля ForeignKey
  • Для полів з множинним вибором
  • Для полів з GenericForeignKey
  • Для полів Many to Many
  • Кастомні варіанти автодоповнення
  • і т.д.

При цьому є можливість використання цього доповнення не тільки в Admin панелі, але і на звичайних сторінках сайту.

тегування django

Вам бракує на сайті системи тегів? Тоді вам потрібен django-tagging. Особливо добре його потужність розкривається при використанні з django-autocomplite-light, який підтримує TagField з django-tagging, дозволяючи пропонувати теги при заповненні поля тегів, а також автоматично створювати теги, що відсутні.

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

На сайті була додана система тегів для статей та питань на форумі, яка у формах виглядає наступним чином:

На цьому зображенні ви можете бачити поле тегів із батарейки django-tagging з використанням поля з django-autocomplite-light.

django-bootstrap3

Ця батарея надає набір шаблонних тегів для більш короткого написання шаблонів з використанням Bootstrap 3. Після піврічного використання цієї батареї у мене склалася думка, що не весь функціонал має сенс використовувати. Наприклад додавання іконок через цей модуль - це лише внесення додаткового навантаження на сайт. Набагато краще написати html код з урахуванням цих іконок. Але при цьому цей модуль зручний для створення форм та пагінації.

На сайті представлено кілька статей щодо використання django-bootstrap3:

django-modeltranslation

Для створення контенту кількома мовами можна або самостійно додавати колонки для кожної мови в моделях даних, або скористатися батареєю, яка автоматично додаватиме всі необхідні поля і автоматично надаватиме потрібну колонку залежно від поточної мови, яку вибрав користувач. Для такої мети підходить django-modeltranslation.

Він створює до основної колонки додаткової колонки до кожної мови, який використовується на сайті. У шаблонах буде автоматично вибирати потрібну мову.

django-daterange-filter

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

Виглядатиме фільтр так:

django-phone-number-field

Додаткове поле, яке додає валідацію номера телефону. Використовувати можна у контактах у профілі користувача, контактній формі тощо.

django-rest-framework

Ось це найцікавіша батарейка для Django. По суті, це додатковий Framework для Django, який додає розширені можливості:

  • По серіалізації моделей даних
  • Більш зручній роботі із запитами, які працюють з JSON
  • Щодо організації API для сторонніх сервісів на сайті
  • Додаткові можливості по роботі з автентифікацією OAuth1 та OAuth2

На даний момент використання цього фреймворку на сайті не велике, але зі збільшенням функціоналу, що працює через AJAX, буде рости.

Для Django рекомендую VDS-сервера хостера Timeweb .

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

ИМ
  • 28 грудня 2018 р. 16:29
  • (відредаговано)

Доброго времени суток Евгений.
А чем вас не устроила реаизация ManyToManyField + django-autocomplete-light вместо django-tagging. Чем он так хорош?

Evgenii Legotckoi
  • 29 грудня 2018 р. 08:58

Добрый день, Игорь.

В первую очередь использовал tagging потому, что это уже готовое решение.

А так, я поизучал данный вопрос. И пришёл к мысли, что лучше использовать GenericForeignKey вместо ManyToManyField. А tagging как раз и использует GenericForeignKey. В данном случае будет одна таблица для всех видов контента, которые присутствуют на сайте. А если ManyToMany, то такие промежуточные таблицы будут множиться как кролики с каждым новым видом контента, а потом её придётся свой ModelManager писать, который будет возвращать QuerySet из всех помеченных объектов. В обще в обоих случаях есть свои плюсы и минусы, но для меня вариант с GenericForeignKey более предпочтительным является. Поскольку таких потенциальных моделей для тегирования на сайте уже несколько десятков набирается.

ИМ
  • 29 грудня 2018 р. 09:03

Кстати да. Таблицы размножились и меня это тоже не устивает так как хочу юзать одну таблицу для всех приложений. Спасибо вам за совет. Буду использовать GenericForeignKey + django-autocomplete-light.

Evgenii Legotckoi
  • 29 грудня 2018 р. 09:14

Единственный минус GenericForeignKey в том, что это псевдо связь, которая не является нормальным Foreign Key отношением, а значит при удалении контента могу остаться битые объекты с GenericForeignKey. Но думаю, что это можно легко поправить через обработку сигнала удаления контента, просто удалить все записи c GenericForeignKey на удалённый контент.

Evgenii Legotckoi
  • 29 грудня 2018 р. 09:15

И ещё. Tagging также поддерживается в django-autocomplete-light. Поэтому я и не стал изобратать сво велосипед.

IscanderChe
  • 28 січня 2021 р. 01:52

Добрый день.

А что посоветуете для ведения блога?

Evgenii Legotckoi
  • 28 січня 2021 р. 03:41
  • (відредаговано)

Добрый день.

Посоветую следующие в обязательном порядке

  • django-autocomplete-light
  • django-tagging
  • django-bootstrap4
  • django-modeltranslation

От ckeditora я отказался, для чистого кастома он не подходит, тем более, что я использую markdown разметку.

django-daterange-filter и django-phonenumber-field опционально, если потребуется. Впрочем фильтровкой даты часто пользуюсь.

django-rest-framework нужен для API и если что-то через JavaScript забираться будет. Так что для обычного блога на ранней стадии он может быть и не нужен

IscanderChe
  • 28 січня 2021 р. 06:49

А какие-то готовые движки под django для блогов есть или надо самому всё с нуля кодить?

Evgenii Legotckoi
  • 28 січня 2021 р. 06:59

Вот тут понятия не имею, вроде как есть какие-то, но не интересовался. Также год назад я начал делать платформу блоговую из Evileg, но у меня забуксовало всё. Надо себя брать в руки и наконец делать.

IscanderChe
  • 28 січня 2021 р. 07:38

Понятно. Спасибо за рекомендации!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 11:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 11:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 22:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi01 листопада 2024 р. 00:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 18:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 17:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 21:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi25 червня 2024 р. 01:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 17:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 13:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 19:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Слідкуйте за нами в соціальних мережах