Główna zmiana w Django 1.10 to przejście na nowe middleware, w teorii wystarczy wiedzieć żeby użyć MIDDLEWARE=[] zamiast MIDDLEWARE_CLASSES=[]
W praktyce pozmieniały się takie smaczki jak miejsce wyrzucania wyjątków process_exception (teraz ma to miejsce w widoku), zmiana klasy na callable oraz sposobu przechodzenia request/response - jednak to trzeba wiedzieć tak na prawdę tylko przy pisaniu własnych middleware.
Zrobili MiddlewareMixin który umożliwa backwards compatibility
(Pisałem zresztą to samo na grupie facebookowej Python Poland.
Co do 1.9:
Najlepiej przeczytać release notes:
https://docs.djangoproject.com/en/1.9/releases/1.9/
Przesiadka na wersje 1.9 przyszła mi łatwo, nie ma tam jakiś groundbreaking changes.
1.8 ma LTS więc jak najbardziej można się uczyć w tej wersji - zamęt dopiero będzie przy Django 2.0 ;)