Opublikowane 28 czerwca 2017 4 minut
bookmark_border

Mój blog w Django

To nie było moje pierwsze spotkanie z Django, ale dopiero teraz po dłuższym spotkaniu z Javą jestem świadomy tego jak wspaniały jest ten framework. Wiele widziałem i zbudowanie swojego bloga na Django okazało się idealną alternatywą dla Wordpressa. Wolę popisać sobie niż bawić się w jakieś makarony w Wordpressie. Z doświadczenia wiem, że lepiej nie polegać na pluginach a Wordpress bez nich jest do niczego.

Budujemy!

Początki są łatwe, szczególnie dla kogoś kto już pracował z Django. Oficjalna dokumentacja i poradniki to jedyne źródła z jakich musiałem skorzystać aby napisać większość mojego bloga. Większość elementów Django mimo swojej magii jest bardzo naturalna w swoim użyciu. Django siedzi pośrodku poziomu abstrakcji między Springiem a PHP i to miejsce mi się spodobało.

Django przekonał mnie też swoim slangiem batteries included co oddaje zasadę DRY (don't repeat youself), czyli ponownie użycie gotowych elementów np. bezpieczeństwo, szablony. Większość takich inicjatyw kończy się słabo (przykład we wstępie), ale w tym przypadku jest naprawdę nieźle, nie perfekcyjnie, ale nieźle. Elementy dostarczone przez framework, których jest wiele i nie ma sensu ich tutaj opisywać, są eleganckie i działają bez zarzutów, ale te zewnętrzne.... no cóż, bywa różnie.

Klocki

Django Packages to strona na której można zobaczyć jak dużo jest tych gotowych elementów. Część z nich już na pierwszy rzut oka wygląda podejrzanie, ale niektóre są w swoim założeniu proste i właśnie te lubię najbardziej. Ja zetknąłem się z tymi paczkami:

  • django-imagekit --- pozwala przetwarzać obrazki, używam do miniaturek
  • django-taggit --- tworzy tagi Te aplikacje zostały na produkcji, ale testowałem też:
  • django-filer
  • django-filebrowser
  • django-colorfield
  • easy-thumbnails

Większość spełniała swoje zadanie (czasem miały one sporo dodatkowych zależności), ale nie koniecznie tak jakbym chciał, a ja staram się zachować minimalizm w tej kwestii.

Czas otworzyć okna

Nie wiedziałem, że będę tak się męczył aby ta aplikacja zobaczyła zapytanie poza localhostem. Ze Springiem było łatwiej --- jeden .jar mała konfiguracja i gotowe. Python wymaga trochę więcej zabawy. Najpierw trzeba podłączyć apkę pod jakiś serwer HTTP, w moim przypadku był to Apache na Ubuntu. Aplikacja nie zawiera w sobie paczek Pythona, więc trzeba je zainstalować, najlepiej w wirtualnym środowisku, aby później nie było niespodzianek. Do potencjalnych źródeł problemów dochodzi też baza danych. Krótko: jeśli nigdy tego nie robiłeś to...

Dodatkowo ja to robiłem jeszcze z użyciem funkcji wirtualnych hostów w Apache, dzięki czemu nie potrzebuję kilku adresów IP aby hostować więcej niż jedną stronę. Po walce z WSGI i virtualenvem doszedł problem z MySQL i collation, który stawiał problemy przy polskich znakach. Później zaimportowałem posty z Hugo do bazy przy pomocy własnego skryptu w Pythonie. Cała zabawa zajęła mi 2 dni, ale teraz zrobiłbym to w mniej niż godzinę, po prostu mieszanie wersji Pythona, ustawianie odpowiednich ścieżek, wirtualne środowisko, ustawienia MySQL sprawiły, że wszystko tak długo zajęło, ale było warto, bo ostatecznie wszystko działa! Pomocne okazały się instrukcje dostarczone przez Django m.in.: Deployment Checklist czy też Deploying Django.

To nie koniec

Odkąd wypuściłem moją aplikację dokonałem już kilku zmian. Dodałem 404, analitykę, pogląd nieopublikowanego posta, ustawienia zewnętrzne czy też nowe testy. Trochę jeszcze trzeba po pracować nad tym blogiem. Przydałoby się dodać lepsze style na panelu administratora i ogólnie trochę go rozszerzyć. Warto byłoby też ustawić automatyczne backupy i dodać nowe widźety. Zapewne szybko to zrobię, bo wracanie do tego projektu to przyjemność.

A jakie są Wasze odczucia z Django lub Pythonem? Warto inwestować w to swój czas? Chętnie was wysłucham.

Bartosz Wiśniewski

Full Stack do wszystkiego (serio). Z programowaniem mam do czynienia już od ponad 5 lat. Zajmowałem się tworzeniem aplikacji mobilnych i gier. Lubię Pythona, Go i JavaScript (ale tą dobrą stronę). Czasem buduję zabawki z Arduino.