Django to chyba najbardziej popularny framework webowy dla języka python i tak się składa, że to właśnie w nim napisałem swojego bloga. Jest taki hermetyczny żarcik programistów, że jak programista zamierza pisać to pierwsze co robi to pisze swojego bloga 😉 W moim przypadku okazało się to akurat prawdą.
Django w wersji 2.0 wyszedł w grudniu 2017 roku więc stwierdziłem, że wreszcie przyszła pora na to by przejść z wersji 1.11 do najnowszej. Dlaczego? Głównie dlatego, że lubię aktualne oprogramowanie bo wiecie, oprócz nowych bugów dochodzą również łatki bezpieczeństwa. Wersja 2.0 nie jest rewolucyjna jak mogłaby sugerować numeracja. W kwestii funkcjonalności to moim zdaniem delikatny progres względem 1.11, ale jest jedna tak naprawdę istotna zmiana - porzucenie wsparcia dla pythona 2. Python 2 to staruszek i jego żywot już dawno powinien się zakończyć jednak z powodu licznych bibliotek opartych o tę wersję oraz z powodu bardzo dużej popularności fundacja stojąca za językiem bała się szybko zakończyć wsparcie. Tak czy inaczej dni pythona 2 dobiegają końca i w 2020 roku przestanie być oficjalnie wspierany. Na stronie co popularniejszych bibliotek jak requests już widnieją ostrzeżenia by rozważyć migrację jeśli dalej siedzisz na tym dziadku z artretyzmem.
Tak czy inaczej wracając do sedna - mój blog jest prosty ale korzystam z kilku zewnętrznych appek i bałem się, że to one mogą stanowić problem. Oto pokrótce sklecona lista:
- django-cleanup - Usunięcie obiektu pliku z bazy skutkuje usunięciem pliku z fizycznej lokalizacji na serwerze. Niestety django nie ma domyślnie takiej funkcjonalności a szkoda.
- django-cors-headers - To te słynne korsy o których pisałem w artykule Szybka aplikacja w angularze: backend
- django-fsm - Automat skończony do obsługi statusów w artykule, pisałem o tym w artykule Automat skończony (FSM) w Django
- django-simple-captcha - Aplikacja do generowania prostej captchy w celach weryfikacyjnych
- django-markdownx - Obsługa Markdowna w django
- django-solo - Obsługa Singletonów, pisałem o tym w Singleton w Django
- djangorestframework - Django Rest Framework, framework w frameworku do tworzenia w łatwy sposób restowego api
- easy-thumbnails - Do łatwego generowania thumbnailsów, cóż nazwa jest bardzo adekwatna do funcjonalności
Jak widzicie trochę tego jest, ale podbijając wersję django jak i wszystkich powyższych appek nie spotkałem się odziwo z żadnym błędem związanym z kompatybilnością. Hurra 🎉 Musiałem jednak wprowadzić kilka małych zmian w kodzie.
- Zmieniła się ścieżka do funkcji reverse na django.urls
- Pola z obcym kluczem w modelach wymagają podania parametru on_delete, który ustala zachowanie po usunięciu obiektu z bazy - czy obiekty pokrewne powinny również zostać usunięte czy nie.
- Sztuczka z allow_tags by móc wyświetlić tagi html w panelu admina nie działa, teraz trzeba skorzystać z funkcji mark_safe
- Przy definiowaniu namespace'a w urlsach trzeba podać nazwę applikacji czyli na przykład
url(r'newsletter/', include(('newsletter.urls', 'newsletter'), namespace='newsletter'))
a nie:
url(r'newsletter/', include('newsletter.urls', namespace='newsletter'))
Zrobienie migracji wraz z wdrożeniem zajęło mi około 30 minut, więc jestem bardzo zadowolony 😀 Jeśli ktoś uczy się programowania w pythonie i liznął trochę django to polecam przeanalizować i sforkować kod źródłowy mojego projektu. Projekt bardzo prosty do zrozumienia, przy okazji pokazuje jak wygląda nieźle napisana aplikacja w django (chociaż brakuje testów i logów)