Evgenii Legotckoi
Evgenii LegotckoiМаусым 23, 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 түймелері ажыратылады. Сірә, редакторды қайта инициализациялау қажет, бірақ менің ойымша, бұл пайдаланушының мұндай жағдайларында оның пайдалылығын толығымен жояды. Жауаптар мен түсініктемелердің ұқсас әрекетін сайт форумында байқауға болады. Пайдаланушы түсініктеме бергісі келетін жауапты таңдағанда, жауап пішіні сол жауаптың астына жылжиды, бұл сайтты пішіннен жауапқа дейін бетті айналдырмай пайдалануды біршама ыңғайлы етеді.
  3. YouTube бейнелерін қосу, кескіндерді қосу, т.б. Иә - CKEditor-да мұндай функция бар, бірақ оны теңшеу және жүктеп салынған суреттерді жүктеп салған пайдаланушыға байланыстыру арқылы күрделірек пайдалану жаңа функциялар мен плагиндерді жазумен бірдей болады, бұл қосымша суретті жүктеп салу терезесін жазудан да көп еңбекті қажет етуі мүмкін. өзіңіздің өзіңіз жазған WYSIWIG. Бұл функция болашақта сайтта болуы керек, бірақ мен оны CKEditor-пен бөліскенін көрмеймін.
  4. CKEEditor дизайны. Бұл редактордың дизайнын теңшеу үшін сізге бөлек стиль кестесін жазу керек, бұл бөлек қолдауды қажет ететін қосымша жұмыс. Бұл әрекетті өз WYSIWIG жазу үшін де пайдалануға болады

Қорытындылау. CKEditor мәтінді өңдеуді қажет ететін сайттың алғашқы іске қосылуында өте қажет, бірақ ресурсты әзірлеу кезінде, әсіресе үлкен жоспарлар болса, өз редакторыңызды жазып, CKEditor-дан бас тартқан жөн.

джанго-автокомплит-жарық

Сайттағы мазмұн өскен кезде дұрыс ақпаратты басқару және табу қиынға соғады. Сондықтан пішіндердегі өрістер үшін автотолтыру өте қажет болады. Мұндай функция үшін ең пайдалы батарея django-autocomplite-light.

Бұл батарея автоматты аяқтауды мыналар үшін пайдалануға мүмкіндік береді:

  • Қарапайым ForeignKey өрістері
  • Бірнеше таңдау өрістері үшін
  • GenericForeignKey бар өрістер үшін
  • Көптен көпке дейінгі өрістер үшін
  • Арнайы автотолтыру опциялары
  • және т.б.

Сонымен қатар, бұл автотолтыруды тек Әкімші панелінде ғана емес, сонымен қатар сайттың кәдімгі беттерінде де пайдалануға болады.

джанго-тегтеу

Сайтыңызда тегтеу жүйесі жоқ па? Содан кейін сізге джанго-тегтеу керек. Ол әсіресе django-автокомплита-жарықпен пайдаланылған кезде күшті болады, ол django-тегтеуден TagField мүмкіндігін қолдайды, тег өрісі толтырылған кезде тегтерді ұсынуға, сондай-ақ жетіспейтін тегтерді автоматты түрде жасауға мүмкіндік береді.

Ұзақ уақыт бойы менің қолым толыққанды тегтер жүйесін жасауға жете алмады және бұл батарея бір кеште жағдайды сақтап қалды.

Сайт форумдағы мақалалар мен сұрақтарға тегтеу жүйесін қосты, ол пішіндерде келесідей көрінеді:

Бұл суретте django-autocomplite-light өрісін пайдаланып, джанго-тегтеу батареясынан тег өрісін көре аласыз.

django-bootstrap3

Бұл батарея Bootstrap 3 көмегімен үлгілерді қысқаша жазуға арналған үлгі тегтерінің жинағын қамтамасыз етеді. Осы батареяны жарты жыл бойы пайдаланғаннан кейін, мен барлық функцияларды пайдаланудың мағынасы жоқ сияқты әсер алдым. Мысалы, осы модуль арқылы белгішелерді қосу сайтқа қосымша жүктемені қосу ғана. Осы белгішелерді ескере отырып, html кодын жазу әлдеқайда жақсы болар еді. Бірақ сонымен бірге бұл модуль пішіндер мен беттеуді құруға ыңғайлы.

Сайт django-bootstrap3 пайдалану туралы бірнеше мақалаларды ұсынады:

джанго үлгісінің аудармасы

Бірнеше тілде мазмұн жасау үшін деректер үлгілеріндегі әрбір тіл үшін бағандарды өзіңіз қосуға немесе барлық қажетті өрістерді автоматты түрде қосатын және пайдаланушы таңдаған ағымдағы тілге байланысты дұрыс бағанды автоматты түрде беретін батареяны пайдалануға болады. Бұл мақсат үшін django-modeltranslation қолайлы.

Ол сайтта қолданылатын әрбір тіл үшін негізгі бағанға қосымша баған жасайды. Үлгілер қажетті тілді автоматты түрде таңдайды.

django-daterange-сүзгісі

Бұл сайттың басқару тақтасына күндер ауқымы бойынша сүзуді қосуға болатын өте кішкентай модуль. Әдепкі бойынша, бұл функция Django-да қамтамасыз етілмеген, бұл өте оғаш.

Сүзгі келесідей болады:

джанго-телефон нөмірі өрісі

Енгізілген телефон нөмірін растауды қосатын қосымша өріс. Сіз оны пайдаланушы профиліндегі контактілерде, байланыс пішінінде және т.б. пайдалана аласыз.

django-rest-framework

Бұл Джанго үшін ең қызықты батарея. Шын мәнінде, бұл кеңейтілген мүмкіндіктерді қосатын Django үшін қосымша Framework:

  • Деректер үлгілерін сериялау арқылы
  • JSON бағдарламасымен жұмыс істейтін сұраулармен жұмыс істеу ыңғайлырақ
  • Сайтта үшінші тарап қызметтері үшін API ұйымдастыру арқылы
  • OAuth1 және OAuth2 аутентификациясымен жұмыс істеуге арналған қосымша мүмкіндіктер

Қазіргі уақытта сайтта бұл фреймворкті пайдалану өте жақсы емес, бірақ функционалдылықтың жоғарылауымен AJAX арқылы жұмыс істеу өседі.

Django үшін Timeweb хостының VDS-сервері ұсынамын.

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

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

ИМ
  • Жел. 28, 2018, 4: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 Т.Ж.

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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз