Keikaku i Django 2.0

in #polish6 years ago (edited)

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)

Sort:  

a czym wyróżnia się django od innych frameworków?

chyba największą zaletą django jest możliwość bardzo szybkiego budowania aplikacji i prototypów. to dość duża kobyła, która ma bardzo dużo rzeczy wbudowanych jak panel admina, rejestracje, logowanie, autoryzacje, ma model użytkownika przez co nie musisz się martwić obsługą haseł, ma system uprawnień, system powiadomień, tlumaczeń. no i django też zmusza do pewnych standardów bezpieczeństwa chociażby do używania tokena csrf w celu zapobieganiu atakowi Cross-Site Request Forgery. Ma też dużo "appek" czyli rozszerzeń więc wiele rzeczy nie musisz pisać nawet sam.

Obecnie mam już trochę doświadczenia w django i postawienie prostego cruda zajęło mi 3h, miałem zadanko na rektutacje i zrobienie pełnoprawnego projektu z logowaniem, rejestracją, translacją, wyświetlaniem danych + jakiś formularz, zajęło mi jeden dzień.

Napisałem ostatnio skrypt do automatycznego deploya (wrzucania na serwer) to już w ogóle szybko mi idzie bo tylko wrzucam kod do repozytorium, odpalam skrypt podaje dane takie jak domena, liczba workerów (procesów obsługujących requesty) i wszystko mi się samo ustawia i konfiguruje

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 60023.73
ETH 3191.15
USDT 1.00
SBD 2.45