Django-да әзірлеудің ыңғайлылығы оның қазірдің өзінде бай функционалдығы бар жеткілікті дамыған Framework екендігінде ғана емес, сонымен қатар қажетті функционалдылықты жүзеге асыратын жоғары сапалы батареялардың (пакеттердің) көп болуымен байланысты. Өз бетіңізше жазу өте қиын, әсіресе сайтты жалғыз жасап жатсаңыз.
Жарты жылдан астам COM доменінде сайтты дамыту процесінде өмірді айтарлықтай жеңілдететін және дамуды тездететін осындай жинақ таңдалды:
- django-ckeditor
- django-autocomplete-light
- django-tagging
- django-bootstrap3
- django-modeltranslation
- django-daterange-filter
- django-phonenumber-field
- django-rest-framework
django-ckeditor
CKEditor - көптеген плагиндері бар WYSIWYG HTML мәтіндік редакторы. Бұл сайтқа қосқан бірінші батарея болды. Редакторды пайдаланып мақала жазу ыңғайлы болғандықтан, барлық қажетті орналасуды ескермеу, барлық тегтерді белгілеу.
Сондай-ақ, өңдеуден басқа, CKEditor суреттерді жүктеп салу мүмкіндігін береді.
Бірақ болашақта мен сайтта CKEditor пайдалануды жоюды жоспарлап отырмын. Бұл оның жұмысындағы маған ұнамайтын бірнеше тармақтарға байланысты:
-
CKEditor көрсету бетті жүктегеннен кейін жүзеге асырылады, яғни пайдаланушы беттің жүктелуін және редактордың бетте инициализациясын күтуі керек.
Егер сайт мақалаларға, материалдарға және т.б. түсініктеме беру мүмкіндігін белсенді түрде пайдаланбаса, бұл маңызды емес, бірақ менің жағдайда мен қажетсіз функционалдылықсыз ұқыпты кірістірілген түсініктеме пішіндерін жасағым келеді. - JavaScript немесе кітапханаларды (мысалы, jQuery) пайдаланып, өңдегіші бар пішінді беттің айналасында жылжытқанда, CKEditor түймелері ажыратылады. Сірә, редакторды қайта инициализациялау қажет, бірақ менің ойымша, бұл пайдаланушының мұндай жағдайларында оның пайдалылығын толығымен жояды. Жауаптар мен түсініктемелердің ұқсас әрекетін сайт форумында байқауға болады. Пайдаланушы түсініктеме бергісі келетін жауапты таңдағанда, жауап пішіні сол жауаптың астына жылжиды, бұл сайтты пішіннен жауапқа дейін бетті айналдырмай пайдалануды біршама ыңғайлы етеді.
- YouTube бейнелерін қосу, кескіндерді қосу, т.б. Иә - CKEditor-да мұндай функция бар, бірақ оны теңшеу және жүктеп салынған суреттерді жүктеп салған пайдаланушыға байланыстыру арқылы күрделірек пайдалану жаңа функциялар мен плагиндерді жазумен бірдей болады, бұл қосымша суретті жүктеп салу терезесін жазудан да көп еңбекті қажет етуі мүмкін. өзіңіздің өзіңіз жазған WYSIWIG. Бұл функция болашақта сайтта болуы керек, бірақ мен оны CKEditor-пен бөліскенін көрмеймін.
- CKEEditor дизайны. Бұл редактордың дизайнын теңшеу үшін сізге бөлек стиль кестесін жазу керек, бұл бөлек қолдауды қажет ететін қосымша жұмыс. Бұл әрекетті өз WYSIWIG жазу үшін де пайдалануға болады
Қорытындылау. CKEditor мәтінді өңдеуді қажет ететін сайттың алғашқы іске қосылуында өте қажет, бірақ ресурсты әзірлеу кезінде, әсіресе үлкен жоспарлар болса, өз редакторыңызды жазып, CKEditor-дан бас тартқан жөн.
джанго-автокомплит-жарық
Сайттағы мазмұн өскен кезде дұрыс ақпаратты басқару және табу қиынға соғады. Сондықтан пішіндердегі өрістер үшін автотолтыру өте қажет болады. Мұндай функция үшін ең пайдалы батарея django-autocomplite-light.
Бұл батарея автоматты аяқтауды мыналар үшін пайдалануға мүмкіндік береді:
- Қарапайым ForeignKey өрістері
- Бірнеше таңдау өрістері үшін
- GenericForeignKey бар өрістер үшін
- Көптен көпке дейінгі өрістер үшін
- Арнайы автотолтыру опциялары
- және т.б.
Сонымен қатар, бұл автотолтыруды тек Әкімші панелінде ғана емес, сонымен қатар сайттың кәдімгі беттерінде де пайдалануға болады.
джанго-тегтеу
Сайтыңызда тегтеу жүйесі жоқ па? Содан кейін сізге джанго-тегтеу керек. Ол әсіресе django-автокомплита-жарықпен пайдаланылған кезде күшті болады, ол django-тегтеуден TagField мүмкіндігін қолдайды, тег өрісі толтырылған кезде тегтерді ұсынуға, сондай-ақ жетіспейтін тегтерді автоматты түрде жасауға мүмкіндік береді.
Ұзақ уақыт бойы менің қолым толыққанды тегтер жүйесін жасауға жете алмады және бұл батарея бір кеште жағдайды сақтап қалды.
Сайт форумдағы мақалалар мен сұрақтарға тегтеу жүйесін қосты, ол пішіндерде келесідей көрінеді:
Бұл суретте django-autocomplite-light өрісін пайдаланып, джанго-тегтеу батареясынан тег өрісін көре аласыз.
django-bootstrap3
Бұл батарея Bootstrap 3 көмегімен үлгілерді қысқаша жазуға арналған үлгі тегтерінің жинағын қамтамасыз етеді. Осы батареяны жарты жыл бойы пайдаланғаннан кейін, мен барлық функцияларды пайдаланудың мағынасы жоқ сияқты әсер алдым. Мысалы, осы модуль арқылы белгішелерді қосу сайтқа қосымша жүктемені қосу ғана. Осы белгішелерді ескере отырып, html кодын жазу әлдеқайда жақсы болар еді. Бірақ сонымен бірге бұл модуль пішіндер мен беттеуді құруға ыңғайлы.
Сайт django-bootstrap3 пайдалану туралы бірнеше мақалаларды ұсынады:
- Django - Lesson 004. Bootstrap 3-ті Django сайтына қосу
- Джанго - 007-сабақ. Django-bootstrap3 негізіндегі беттеуді қосу
- Django - Lesson 020. ListView және django-bootstrap3 көмегімен сайттағы мақалалардың беттерін қосу
джанго үлгісінің аудармасы
Бірнеше тілде мазмұн жасау үшін деректер үлгілеріндегі әрбір тіл үшін бағандарды өзіңіз қосуға немесе барлық қажетті өрістерді автоматты түрде қосатын және пайдаланушы таңдаған ағымдағы тілге байланысты дұрыс бағанды автоматты түрде беретін батареяны пайдалануға болады. Бұл мақсат үшін django-modeltranslation қолайлы.
Ол сайтта қолданылатын әрбір тіл үшін негізгі бағанға қосымша баған жасайды. Үлгілер қажетті тілді автоматты түрде таңдайды.
django-daterange-сүзгісі
Бұл сайттың басқару тақтасына күндер ауқымы бойынша сүзуді қосуға болатын өте кішкентай модуль. Әдепкі бойынша, бұл функция Django-да қамтамасыз етілмеген, бұл өте оғаш.
Сүзгі келесідей болады:
джанго-телефон нөмірі өрісі
Енгізілген телефон нөмірін растауды қосатын қосымша өріс. Сіз оны пайдаланушы профиліндегі контактілерде, байланыс пішінінде және т.б. пайдалана аласыз.
django-rest-framework
Бұл Джанго үшін ең қызықты батарея. Шын мәнінде, бұл кеңейтілген мүмкіндіктерді қосатын Django үшін қосымша Framework:
- Деректер үлгілерін сериялау арқылы
- JSON бағдарламасымен жұмыс істейтін сұраулармен жұмыс істеу ыңғайлырақ
- Сайтта үшінші тарап қызметтері үшін API ұйымдастыру арқылы
- OAuth1 және OAuth2 аутентификациясымен жұмыс істеуге арналған қосымша мүмкіндіктер
Қазіргі уақытта сайтта бұл фреймворкті пайдалану өте жақсы емес, бірақ функционалдылықтың жоғарылауымен AJAX арқылы жұмыс істеу өседі.
Django үшін Timeweb хостының VDS-сервері ұсынамын.
Доброго времени суток Евгений.
А чем вас не устроила реаизация ManyToManyField + django-autocomplete-light вместо django-tagging. Чем он так хорош?
Добрый день, Игорь.
В первую очередь использовал tagging потому, что это уже готовое решение.
А так, я поизучал данный вопрос. И пришёл к мысли, что лучше использовать GenericForeignKey вместо ManyToManyField. А tagging как раз и использует GenericForeignKey. В данном случае будет одна таблица для всех видов контента, которые присутствуют на сайте. А если ManyToMany, то такие промежуточные таблицы будут множиться как кролики с каждым новым видом контента, а потом её придётся свой ModelManager писать, который будет возвращать QuerySet из всех помеченных объектов. В обще в обоих случаях есть свои плюсы и минусы, но для меня вариант с GenericForeignKey более предпочтительным является. Поскольку таких потенциальных моделей для тегирования на сайте уже несколько десятков набирается.
Кстати да. Таблицы размножились и меня это тоже не устивает так как хочу юзать одну таблицу для всех приложений. Спасибо вам за совет. Буду использовать GenericForeignKey + django-autocomplete-light.
Единственный минус GenericForeignKey в том, что это псевдо связь, которая не является нормальным Foreign Key отношением, а значит при удалении контента могу остаться битые объекты с GenericForeignKey. Но думаю, что это можно легко поправить через обработку сигнала удаления контента, просто удалить все записи c GenericForeignKey на удалённый контент.
И ещё. Tagging также поддерживается в django-autocomplete-light. Поэтому я и не стал изобратать сво велосипед.
Добрый день.
А что посоветуете для ведения блога?
Добрый день.
Посоветую следующие в обязательном порядке
От ckeditora я отказался, для чистого кастома он не подходит, тем более, что я использую markdown разметку.
django-daterange-filter и django-phonenumber-field опционально, если потребуется. Впрочем фильтровкой даты часто пользуюсь.
django-rest-framework нужен для API и если что-то через JavaScript забираться будет. Так что для обычного блога на ранней стадии он может быть и не нужен
А какие-то готовые движки под django для блогов есть или надо самому всё с нуля кодить?
Вот тут понятия не имею, вроде как есть какие-то, но не интересовался. Также год назад я начал делать платформу блоговую из Evileg, но у меня забуксовало всё. Надо себя брать в руки и наконец делать.
Понятно. Спасибо за рекомендации!