Co nowego czeka nas w Django 1.8?
1 March 2015
Comments
Parę dni temu wydano pierwszą betę Django 1.8. Co więc ciekawego czeka nas na przełomie marca i kwietni, gdy ukaże się pierwsza stabilna wersja 1.8?
Django 1.8 będzie drugim wydaniem LTS otrzymującym poprawki bezpieczeństwa przez co najmniej trzy lata. Poprzednie wydanie LTS - 1.4 będzie wspierane przez sześć miesięcy od daty wydania 1.8. Django 1.8 wymagać będzie Pythona 2.7 lub nowszego.
Co nowego?
- Opisano API Model._meta pozwalające operować na polach modelu. Dostępne od dawna nie było oficjalnie opisane i nie gwarantowano jego stałości.
- Stworzono API pozwalające podpinać różne silniki szablonów. Domyślnie obsługiwane są szablony Django i Jinja2.
- Dodano SecurityMiddleware pozwalające zwiększyć bezpieczeństwo ciągu żądanie-odpowiedź.
- Pojawiły się specyficzne dla Postgresa pola ArrayField, HStoreField, pola zakresów *Range i operator unaccent.
- Dodano także pole UUIDField i DurationField.
- Rozbudowano możliwości ORMa. Nowe funkcjonalności pojawiły się w wyrażeniach, wyrażeniach warunkowych, czy możliwości wołania ustawiać dane testowe raz dla całej klasy testów dzięki metodzie
setUpTestData
oraz transakcji i savepointów (dla baz danych które to obsługują), co może przyśpieszyć testowanie. - Dodano mechanizm do obsługi procesu oznaczania własnych pól modeli jako przestarzałe (deprecated)
Więcej w notce wydania.
Wstecznie niezgodne zmiany
- Dodanie zależnych obiektów (.add(), .remove(), .clear() i bezpośrednie przypisania) odbywa się w transakcjach, a sygnały wykonywane są w transakcji metody. Wyjątek z funkcji podpiętej pod taki sygnał cofnie całą operację.
- Przypisanie niezapisanego obiektu do pola ForeignKey, czy OneToOneField rzuci wyjątkiem ValueError.
- Zmieniła się też obsługa przekazywania argumentów do klas
management command
. - ORM rzuci ValueError jeżeli obiekt użyty w wyszukaniu ma zły typ.
- Django 1.8 wspiera PostgreSQL w wersji nie niższej niż 9.0, MySQL w wersji nie niższej niż 5.5, Oracle 11.1 lub nowsze.
- Należy wołać super w metodach testów: setUpClass() i tearDownClass()
- django.contrib.formtools zostały przeniesione z Django do zewnętrznej aplikacji.
- Django zamykało połączenie z bazą danych dla każdego testu. W 1.8 po wprowadzeniu transakcji Django nie zamyka już połączeń. Stare zachowanie dostępne jest poprzez klasę TransactionTestCase.
- Funkcje
rewersujące
(reverse, reverse_lazy) zwracają łańcuch unikodowy zamiast bajtów. - Można już usunąć {% load cycle from future %} i {% load firstof from future %}, gdyż nowy kod został przeniesiony na domyślne implementacje.
- Wprowadzenie obsługi wielu silników szablonów dodało nowe zmienne konfiguracyjne, jak i przeniosło django.core.context_processors do django.templates.context_processors.
Django zachęca też do importowania widoków w plikach urls.py zamiast używania łańcuchów. Także urlpatterns może być listą obiektów url - zamiast funkcją patterns z pustym łańcuchem na początku. Podawanie widoków jako łańcuchy oznaczono jako przestarzałe.
RkBlog
Comment article