Evgenii Legotckoi
Evgenii Legotckoi23. Juni 2017 04:12

Django - Tutorial 025. Ein Satz nützlicher Batterien Django

Die Bequemlichkeit der Entwicklung auf Django liegt nicht nur in der Tatsache, dass es sich bereits um ein ziemlich entwickeltes Framework mit reichhaltiger Funktionalität handelt, sondern auch im Vorhandensein einer großen Anzahl hochwertiger Batterien (Pakete), die die erforderliche Funktionalität implementieren Es ist ziemlich schwierig, alleine zu schreiben, besonders wenn Sie die Website alleine entwickeln.

Bei der Entwicklung einer Site auf der COM-Domain für mehr als ein halbes Jahr wurde genau ein solches Kit ausgewählt, das das Leben erheblich vereinfacht und die Entwicklung beschleunigt:

  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 ist ein WYSIWYG-HTML-Texteditor mit vielen Plugins. Dies war die erste Batterie, die ich der Website hinzugefügt habe. Da es bequemer ist, Artikel mit dem Editor zu schreiben und nicht das gesamte erforderliche Layout zu berücksichtigen, werden alle Tags vorgeschrieben.

Zusätzlich zur Bearbeitung bietet CKEditor auch die Möglichkeit, Bilder hochzuladen.

In Zukunft plane ich jedoch, die Verwendung von CKEditor auf der Website zu entfernen. Das liegt an mehreren Punkten, die mir an seiner Arbeit nicht gefallen:

  1. Das Rendern von CKEditor wird nach dem Laden der Seite ausgeführt, d. h. der Benutzer muss warten, bis die Seite geladen und der Editor auf der Seite initialisiert ist.
    Wenn die Website die Möglichkeit zum Kommentieren von Artikeln, Materialien usw. nicht aktiv nutzt, ist dies nicht kritisch, aber in meinem Fall möchte ich ordentlich integrierte Kommentarformulare ohne unnötige Funktionen erstellen.
  2. Wenn Sie ein Formular mit einem Editor mithilfe von JavaScript oder Bibliotheken (z. B. jQuery) auf der Seite verschieben, werden die Schaltflächen von CKEditor deaktiviert. Höchstwahrscheinlich muss der Editor neu initialisiert werden, aber meiner Meinung nach macht dies seine Nützlichkeit in solchen Benutzerfällen vollständig zunichte. Sie können ein ähnliches Verhalten der Form von Antworten und Kommentaren im Forum der Website beobachten. Wenn der Benutzer eine Antwort auswählt, die er kommentieren möchte, wird das Antwortformular unter diese Antwort verschoben, wodurch die Website etwas bequemer zu verwenden ist, ohne von Formular zu Antwort scrollen zu müssen.
  3. Fügen Sie YouTube-Videos hinzu, fügen Sie Bilder hinzu usw. Ja - CKEditor verfügt über diese Funktionalität, aber seine Anpassung und komplexere Verwendung mit dem Verknüpfen hochgeladener Bilder mit dem Benutzer, der sie hochgeladen hat, entspricht dem Schreiben neuer Funktionen und Plugins, was möglicherweise noch arbeitsintensiver ist, als ein zusätzliches Fenster zum Hochladen von Bildern zu schreiben Ihr eigenes selbstgeschriebenes WYSIWIG. Diese Funktionalität soll in Zukunft auf der Website verfügbar sein, aber ich sehe sie nicht mit CKEditor geteilt.
  4. CKEditor-Design. Um das Design dieses Editors anzupassen, müssen Sie ein separates Stylesheet schreiben, was ebenfalls zusätzliche Arbeit ist, die separate Unterstützung erfordert. Dieser Aufwand kann auch genutzt werden, um einen eigenen WYSIWIG zu schreiben

Zusammenfassen. CKEditor ist beim ersten Start einer Website, auf der Textbearbeitung erforderlich ist, unverzichtbar. Wenn Sie jedoch eine Ressource entwickeln, insbesondere wenn Sie große Pläne haben, sollten Sie erwägen, einen eigenen Editor zu schreiben und CKEditor aufzugeben.

django-autocomplite-light

Wenn der Inhalt auf der Website wächst, wird es schwierig, die richtigen Informationen zu verwalten und zu finden. Daher ist die automatische Vervollständigung von Feldern in Formularen unverzichtbar. Die nützlichste Batterie für solche Funktionen ist django-autocomplite-light.

Mit dieser Batterie können Sie die automatische Vervollständigung für Folgendes verwenden:

  • Gewöhnliche ForeignKey-Felder
  • Für Multiple-Choice-Felder
  • Für Felder mit GenericForeignKey
  • Für viele bis viele Felder
  • Benutzerdefinierte Autovervollständigungsoptionen
  • usw.

Gleichzeitig ist es möglich, diese automatische Vervollständigung nicht nur im Admin-Panel, sondern auch auf normalen Website-Seiten zu verwenden.

Django-Tagging

Vermissen Sie ein Tagging-System auf Ihrer Website? Dann brauchen Sie Django-Tagging. Es ist besonders leistungsfähig, wenn es mit django-autocomplite-light verwendet wird, das das TagField von django-tagging unterstützt, sodass Sie Tags vorschlagen können, wenn das Tag-Feld ausgefüllt ist, sowie fehlende Tags automatisch generieren.

Lange Zeit reichten meine Hände nicht aus, um ein vollwertiges Tag-System herzustellen, und diese Batterie rettete die Situation buchstäblich an einem Abend.

Die Seite hat ein Tagging-System für Artikel und Fragen im Forum hinzugefügt, das in den Formularen so aussieht:

In diesem Bild sehen Sie das Tag-Feld aus der Django-Tagging-Batterie mit dem Feld aus django-autocomplite-light.

django-bootstrap3

Diese Batterie bietet eine Reihe von Template-Tags zum präziseren Schreiben von Vorlagen mit Bootstrap 3. Nachdem ich diese Batterie ein halbes Jahr lang verwendet hatte, hatte ich den Eindruck, dass nicht alle Funktionen sinnvoll zu verwenden sind. Wenn Sie beispielsweise Symbole über dieses Modul hinzufügen, wird die Website nur zusätzlich belastet. Es wäre viel besser, HTML-Code mit diesen Symbolen zu schreiben. Gleichzeitig ist dieses Modul praktisch zum Erstellen von Formularen und Seitenumbrüchen.

Die Seite bietet mehrere Artikel zur Verwendung von django-bootstrap3:

Django-Modellübersetzung

Um Inhalte in mehreren Sprachen zu erstellen, können Sie entweder selbst Spalten für jede Sprache in den Datenmodellen hinzufügen oder eine Batterie verwenden, die automatisch alle erforderlichen Felder hinzufügt und abhängig von der aktuellen Sprache, die der Benutzer ausgewählt hat, automatisch die richtige Spalte bereitstellt. Hierfür eignet sich django-modeltranslation.

Es erstellt eine zusätzliche Spalte zur Hauptspalte für jede Sprache, die auf der Website verwendet wird. Die Vorlagen wählen automatisch die erforderliche Sprache aus.

django-daterange-filter

Dies ist ein sehr kleines Modul, mit dem Sie das Filtern nach Datumsbereich zum Site-Admin-Panel hinzufügen können. Standardmäßig wird diese Funktionalität in Django nicht bereitgestellt, was sehr seltsam ist.

Der Filter sieht folgendermaßen aus:

Django-Telefonnummer-Feld

Ein zusätzliches Feld, das die Validierung der eingegebenen Telefonnummer hinzufügt. Sie können es in Kontakten im Benutzerprofil, Kontaktformular usw. verwenden.

Django-Rest-Framework

Dies ist die interessanteste Batterie für Django. Tatsächlich ist dies ein zusätzliches Framework für Django, das erweiterte Funktionen hinzufügt:

  • Durch Serialisierung von Datenmodellen
  • Bequemeres Arbeiten mit Anfragen, die mit JSON funktionieren
  • Durch die Organisation einer API für Dienste von Drittanbietern auf der Website
  • Zusätzliche Funktionen für die Arbeit mit OAuth1- und OAuth2-Authentifizierung

Im Moment ist die Verwendung dieses Frameworks auf der Website nicht großartig, aber mit der Zunahme der Funktionalität wird die Arbeit mit AJAX zunehmen.

Für Django empfehle ich Timeweb-Hoster VDS-Server .

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

ИМ
  • 28. Dezember 2018 16:29
  • (bearbeitet)

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

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

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

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

ИМ
  • 29. Dezember 2018 09:03

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

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

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

IscanderChe
  • 28. Januar 2021 01:52

Добрый день.

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

Evgenii Legotckoi
  • 28. Januar 2021 03:41
  • (bearbeitet)

Добрый день.

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

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

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

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

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

IscanderChe
  • 28. Januar 2021 06:49

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

Evgenii Legotckoi
  • 28. Januar 2021 06:59

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

IscanderChe
  • 28. Januar 2021 07:38

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

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken