Integracja logowania/rejestracji z Facebookiem poprzez OAUTH

Integracja rejestracji/logowania z Facebookiem na wielu serwisach jest bardzo przydatna. W Django jest na to kilka sposobów. Podstawowy element to autoryzacja poprzez OAUTH, a dodatkowy to wykorzystanie Facebookowego Graph API do pobierania/tworzenia danych (np. pobieranie informacji o użytkowniku, tworzeniu postów na jego tablicy itp.)

Obsługę autoryzacji zapewni django_facebook_oauth (dostępnych jest kilka forków). Do Graph API można wykorzystać Facepy - token z oauth zapisywany jest w bazie przez django_facebook_oauth.

Tworzenie bazodanowych aplikacji desktopowych za pomocą frameworka Camelot

Camelot to framework do szybkiego tworzenia aplikacji desktopowych w oparciu o Pythona, Qt4 i SQLAlchemy. Framework ten celuje w aplikacje oparte o bazy danych - tam gdzie mamy kolekcje danych i chcemy nimi zarządzać (katalogi, zbiory różnych danych). Poważną konkurencją dla tego typu aplikacji desktopowych są aplikacje webowe, które dość często mogą okazać się prostsze lub tańsze do wykonania. W porównaniu do czystego PyQt4 framework daje nam gotowy szkielet oraz interfejs dla całej aplikacji (który dalej można rozszerzać i modyfikować).

Camelot po uruchomieniu

Przegląd nowych "Generic Views" Django opartych o klasy

W Django dostępne były "generyczne" widoki upraszczające tworzenie widoków o często powtarzającej się funkcjonalności. W Django 1.3 wprowadzono zupełnie nowy typ ogólnych, "generycznych" widoków opartych o klasy. Stary system oparty o funkcje został oznaczony jako przestarzały (czyli zostanie usunięty w przyszłych wydaniach frameworka). Opis jak i referencje nowych widoków znajdziemy w dokumentacji. Poniżej przedstawię je na kilku przykładach.

Aktualizacja artykułów o SQLAlchemy i Elixir

W ramach przygotowań do artykułów o Camelot odświeżyłem artykuły dotyczące SQLAlchemy i Elixir:

  • SQLAlchemy - Wprowadzenie do pythonowego ORMa baz danych SQLAlchemy obsługującego wszystkie popularne relacyjne bazy danych (Postgresql, SQLite, MySQL, Oracle, Firebird czy MS-SQL)
  • Elixir - łatwy sposób na SQLAlchemy - Opis nakładki Elixir na ORM SQLAlchemy ułatwiającej korzystanie z funkcji mappera obiektów na tabele w bazie danych i operowaniu na nich poprzez te obiekty.

Django 1.4 - lista nowości i zmian w nowej wersji frameworka

23 marca wydana została nowa wersja frameworka Django oznaczona numerem 1.4. Można pobrać ją ze strony projektu. Największą zmianą w tej wersji jest dodanie obsługi stref czasowych. Jeżeli włączymy obsługę stref czasowych Django będzie zapisywać obiekty daty/czasu dla czasu UTC. Przy wyświetlaniu obiekty te uwzględnią strefę czasową użytkownika. Zostało już dokładnie opisane w dokumentacji. Oprócz tego w Django 1.4 znajdziemy:

  • Usprawnienia w ORMie, w tym obsługę SELECT FOR UPDATE, czy możliwość wydajniejszego dodawania dużych grup rekordów. Dodano także QuerySet.prefetch_related do "grupowego" ładowania powiązanych rekordów (tam gdzie select_related() nie zadziała).
  • Zwiększenie bezpieczeństwa - dodanie lepszego haszowania haseł (np. za pomocą bcrypt, czy PBKDF2), nowe narzędzia do podpisywania danych, usprawnienia CSRF i proste zabezpieczenia przez clickjackingiem.
  • Zmieniono także startowy szkielet projektu jak i manage.py tak było tam mniej "magii".
  • Dodano obsługę testów działających w przeglądarce (np. Selenium)
  • Pełna lista zmian w release notes.

Django 1.4 nie obsługuje już Pythona 2.4. Obecnie Django działa pod wersjami 2.5, 2.6 i 2.7. Niebawem znane mają być plany stopniowej migracji z Pythona 2 na Pythona 3 (choć obsługa Pythona 2 na pewno za szybko nie zniknie).

Z wstecznie niezgodnych zmian wymienić można wymaganą wartość dla SECRET_KEY (Django 1.4 rzuci tylko ostrzeżeniem DeprecationWarning, ale Django 1.5 już się bez tego nie uruchomi). W przypadku Panelu Admina framework będzie szukał plików statycznych w ścieżce określanej przez STATIC_URL (STATIC_URL/admin/).

MyghtyBoard 2012 pierwsza beta - aplikacja forum dla Django

Po długim okresie braku aktualizacji wreszcie zaktualizowałem kod aplikacji forum - MyghtyBoard do bieżącej wersji zgodnej z najnowszymi wersjami Django (+ trochę poprawek). Wersja demo/testowa wygląda tak:

myghtyboard-2012

W założeniu jest to aplikacja do integracji z różnymi innymi projektami. Posiada zestaw podstawowych funkcjonalności i jest dość prosta w budowie.

Kod można pobrać ze strony projektu. W paczce znajduje się gotowa testowa aplikacja, wystarczy odpalić serwer deweloperski (login/hasło - forum/forum).

Asynchroniczne zadania - Celery w projektach Django

Celery to asynchroniczna kolejka zadań zlecanych przez np. aplikacje webowe. Zadania mogą być wykonywane asynchronicznie - aplikacja zlecająca nie czeka na wynik, lub synchronicznie - z oczekiwaniem na wynik. Zadania wykonywane mogą być współbieżnie na jednym lub wielu serwerach. Cały ten system ma już za sobą liczne udane wdrożenia, a jego główne zadanie to odciążanie aplikacji webowych od wykonywania długotrwałych operacji związanych z jakąś akcją (np. generowanie miniatur, wysyłanie żądań do zewnętrznych API itd.).

Dostępne są także integracje z popularnymi frameworkami, np. django-celery, celery-pylons, czy flask-celery.

Zmniejszanie rozmiaru stron HTML za pomocą django-htmlmin

django-htmlmin to "minimalizator" kodu HTML zwracanego przez widoki Django. Można stosować go też poza tym frameworkiem. Za jego pomocą można zmniejszyć rozmiar strony HTML i tym samym przyśpieszyć nieznacznie czas jej ładowania, zmniejszyć transfer wychodzący. Usuwa komentarze, przejścia do nowej linii i puste znaki. Może jednak obecnie popsuć renderowanie się niektórych stron (np. wykorzystujących tagi HTML5).