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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD

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

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

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

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

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

  • Результат:20баллов,
  • Очки рейтинга-10
Последние комментарии
ИМ
Игорь Максимов22 ноября 2024 г. 19:51
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 октября 2024 г. 21:37
Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 октября 2024 г. 15:19
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5 октября 2024 г. 14:51
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55 июля 2024 г. 18:02
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
m
moogo22 ноября 2024 г. 15:17
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi
Evgenii Legotckoi24 июня 2024 г. 22:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 ноября 2024 г. 14:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject4 июня 2022 г. 10:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

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