Serwis poświęcony Pythonowi - wszechstronnemu językowi programistycznemu. Podstawy i kurs Pythona, Django do tworzenia serwisów internetowych, PyQt4 do tworzenia aplikacji desktopowych.
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.
Pomysłów na Django + Facebook jest wiele. Pośród nich mamy facepy (dokumentacja) do obsługi Graph API i fandjango (dokumentacja) do tworzenia aplikacji facebookowych wykorzystujące facepy oraz oferujące mechanizm autoryzacji użytkowników w aplikacji. W tym artykule zaprezentuję te dwie biblioteki (na przykładzie aplikacji wykorzystującej fandjango).
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ć).
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.
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.
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)
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/).
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:
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).
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.).
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).
Biblioteka requests służy do obsługi protokołu HTTP - wysyłania żądań, odbierania odpowiedzi itd. - to co robi już np. urllib2, czy pycurl. W tym przypadku postanowiono na prostotę użytkowania - stworzono bibliotekę "dla ludzi".
Django to prosty w nauce potężny framework do tworzenia dynamicznych serwisów www wyprzedzający o lata świetlne możliwości PHP :) Kluczowe zalety to świetna dokumentacja, ORM baz danych, automatycznie tworzony kompletny Panel Admina.
PyQt to pełne API dla wieloplatformowej biblioteki Qt. Moduł PyQt umożliwia tworzenie funkcjonalnych aplikacji desktopowych dla systemów MS Windows, Mac OS czy Linux/Unix szybko i przyjemnie.
PyGTK to Pythonowe API dla biblioteki GTK+ związanej z projektem GNOME. PyGTK umożliwia tworzenia aplikacji desktopowych dla Linuksa, Windowsa, cz Mac OS X.