Keikaku i Django 2.0

Words
495
Reading
3 min
Listen
Play
9y

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)

Keikaku i Django 2.0 | Ecency