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:
- django-ckeditor
- django-autocomplete-light
- django-tagging
- django-bootstrap3
- django-modeltranslation
- django-daterange-filter
- django-phonenumber-field
- 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:
-
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. - 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.
- 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.
- 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 - Lektion 004. Bootstrap 3 mit einer Django-Site verbinden
- Django - Lektion 007. Paginierung basierend auf django-bootstrap3 hinzufügen
- Django - Lektion 020. Paginierung von Artikeln auf der Website mit ListView und django-bootstrap3 hinzufügen
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 .
Доброго времени суток Евгений.
А чем вас не устроила реаизация 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, но у меня забуксовало всё. Надо себя брать в руки и наконец делать.
Понятно. Спасибо за рекомендации!