Nikodem Roy Borkowski
Strona personalna oraz blog o Django, bazach danych, kodowaniu oraz wszystkim innym, co jest niezbędne do programowania.
KONTAKTnikodem.roy@gmail.com
TheDjango.Dev- blog oraz strona personalna
Strona na której aktualnie się znajdujesz została w pełni napisana wykorzystując framework Django na backendzie oraz DTL na frontendzie. Zależało mi możliwość łatwej i intuicyjnej edycji kontentu dlatego też zdecydowana większość zamiennych jak teksty, zdjęcia czy ikony zostały napisane w oparciu o modele. Umożliwiło to edycję prawie całej zawartości strony poprzez panel administracyjny, bez konieczności ingerowania w frontend . Dodatkowo dzięki integracji zewnętrznych modułów dodałem zmianę wersji językowej poprzez translację konkretnych modeli jak i rozbudowany edytor tekstowy CKEditor w celu przygotowania postów.
Główne funkcję:
1. Tworzenie postów w CKEditor (możliwość dodania tag meta description)
2. Abstract profil do którego przypisane są posty oraz informacje kontaktowe
3. Translacja wybranych modeli oraz statycznych tekstów.
4. Zapisywanie postów w plikach cookies w celu późniejszego zobaczenia.
5. Dodawanie oraz wyświetlanie różnych komentarzy w zależności od wersji językowej.
6. Kategorie stworzone w oparciu o reverse foreign relationship
7. Wysyłanie wiadomości poprzez formularz kontaktowy
8. Pełna responsywność z wykorzystaniem pure CS (bez framework)
Cel i założenia
Chciałem stworzyć bloga oraz stronę personalną w którym będę mógł uporządkować oraz skonsolidować swoją wiedzę na temat programowania w Pythonie, a w szczególności Django. Z pewnością mogłem do tego wykorzystać jeden z wielu dostępnych rozwiązań, jednak zdecydowałem wykorzystać nabyte umiejętności i stworzyć bloga od przysłowiowego zera. Wliczając do tego nie tylko kod backendowy, ale również design, który ostatecznie znajduje się na frontendzie. Było to dla mnie szczególnie ważne doświadczenie ponieważ cały proces developmentu oraz deploymentu musiałem wykonać we własnym zakresie.
Swoją pracę rozpocząłem od przygotowania mockupów poszczególnych widoków w Adobe XD, które następnie przeniesione zostały do HTML oraz CSS. Daleko mi do bycia ekspertem w dziedzinie frontendu dlatego też ten etap zleciłem zewnętrznemu wykonawcy z którym współpracowałem na całym etapie tworzenia widoków. Zależało mi na możliwie dużej kontroli nad wyglądem poszczególnych elementów oraz zminimalizowaniu zbędnego kodu dlatego też zdecydowałem się na wykorzystanie czystego CSS bez frameworku typu bootstrap.
Od strony back endowej prace szły zdecydowanie sprawniej, jednak również nie obyło się bez wyzwań. Zdecydowałem się na dodanie dodatkowej wersji językowej co wymagało ode mnie przemyślenia architektury bazy danych lub znalezienie gotowego rozwiązania, które mógłbym w tym celu zaimplementować. Przez długi czas zastanawiałem się jakie rozwiązanie będzie najbardziej słuszne.
Nie udało mi się znaleźć jednego słusznego wyjścia i ostatecznie wybrałem hybrydowe podejście. Główny oraz dynamiczny kontent oparty na modelach (jak choćby posty) tworzony jest przy pomocy modułu django-parler, który również odpowiedzialny jest za wyświetlanie poprawnej wersji językowej. Wszystkie bardziej statyczne teksty (pojedyncze słowa, które nie są powiązane z konkretnym modelem) tłumaczone są za pomocą Rosetta. Bardziej customo podszedłem do kwestii komentarzy, które nie są oparte na zewnętrznym module. Napisane zostały w oparciu o model który posiada oddzielne pola językowe, a konkretny kontent wyświetlany w zależności od prefixu języka w URL.
Wyciągnięte wnioski
Był to pierwszy projekt, który napisałem oraz uruchomiłem samodzielnie. Podczas pracy natrafiłem na sporą ilość problemów, jednak z każdym udało mi się uporać. Wielokrotnie trafiałem na stackoverflow, a korzystanie z tej strony zdecydowanie stało się dla mnie nawykiem. Przekonałem się również do tego, że dobry programista to ten co potrafi efektywnie używać google.
Kwestia translacji strony stała się niespodziewanie dużym przedsięwzięciem. Również i w tym przypadku olbrzymią część wiedzy i inspiracji wyniosłem z czytania postów oraz wpisów na blogach, nie obyło się oczywiście bez kilku wizyt na stacku. Nie starałem się wymyślać koła na nowo i jestem zadowolony z ostatecznej formy projektu.
Jednak największym wyzwaniem okazał się sam proces deploymentu. Nie chciałem wybrać najprostszej ścieżki i wrzucić gotowy kod na Heroku. Wiedziałem, że realnie byłaby to najszybsza opcja, jednak zależało mi aby spróbować swoich sił w bardziej komercyjnym podejściu. Po zgłębieniu tematu zdecydowałem się na VPS w digitalocean. Postawiłem na sprawdzone oraz dobrze opisane rozwiązania, dlatego też wybrałem połączenie Gunicorn jako WSGI server oraz Nginx w roli web servera. Muszę też przyznać, że była to moja pierwsza przygoda z Linuxem, a przynajmniej pierwsza która zakończyła się sukcesem.
Reasumując udało mi się wynieść sporo doświadczeń tworząc tą aplikację. Począwszy od przygotowania makiet frontu, następnie pracując nad core aplikacji oraz kończąc na stawianiu aplikacji. Być może pewne etapy można było wykonać szybciej lub efektywniej, jednak jestem w pełni przekonany, że nabytą podczas tego procesu wiedzę uda mi się zastosować przy każdym następnym projekcie.