Evgenii Legotckoi
Evgenii Legotckoi23 июня 2017 г. 4: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-tagging

Вам не хватает на сайте системы тегов? Тогда вам необходим 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-phonenumber-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 г. 8:58

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

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

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

ИМ
  • 29 декабря 2018 г. 9:03

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

Evgenii Legotckoi
  • 29 декабря 2018 г. 9:14

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

Evgenii Legotckoi
  • 29 декабря 2018 г. 9:15

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

IscanderChe
  • 28 января 2021 г. 1:52

Добрый день.

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

Evgenii Legotckoi
  • 28 января 2021 г. 3: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 г. 6:49

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

Evgenii Legotckoi
  • 28 января 2021 г. 6:59

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

IscanderChe
  • 28 января 2021 г. 7:38

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
m
  • molni99
  • 26 октября 2024 г. 11:37

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

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

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

  • Результат:20баллов,
  • Очки рейтинга-10

C++ - Тест 003. Условия и циклы

  • Результат:42баллов,
  • Очки рейтинга-8
Последние комментарии
i
innorwall9 ноября 2024 г. 2:43
Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.4.0 (Binary Box) can i buy priligy in usa Reprod Biomed Online 10 3 310 319
i
innorwall9 ноября 2024 г. 2:29
EVILEG - 4 Года онлайн buy priligy Pelleted food this way of administration is less stressful for the mice, and a few vendors offer a commercially available chow
i
innorwall8 ноября 2024 г. 19:51
Django - Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте buy priligy online usa In addition, it might not be effective at the doses recommended, because of your previous tolerance to a similar type of drug
i
innorwall8 ноября 2024 г. 18:40
Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце priligy results This slowing of eGFR decline was observed in patients with and without low eGFR and in those with and without type 2 diabetes
i
innorwall8 ноября 2024 г. 13:45
QML - Урок 002. Custom Button in QML Android 2007; 14 2 270 83 priligy dapoxetine 60mg Testicular imaging is sort of a unique niche right now, Гў
Сейчас обсуждают на форуме
i
innorwall8 ноября 2024 г. 18:08
добавить qlineseries в функции School of Nursing, Long Island University, Brooklyn Campus, Brooklyn, NY, USA priligy dapoxetine 30mg
9
9Anonim25 октября 2024 г. 19:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов3 октября 2024 г. 14:05
Реализация навигации по разделам Спасибо Евгений!
F
Fynjy22 июля 2024 г. 14:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Следите за нами в социальных сетях