Programowanie w Internecie: #6 Małe frameworki webowe
-
Upload
mikolaj-olszewski -
Category
Documents
-
view
155 -
download
3
description
Transcript of Programowanie w Internecie: #6 Małe frameworki webowe
-
#6: Mae frameworki weboweMikoaj Olszewski
Jakie pytania po lekturze?
Podsumowanie tematw
Stos TCP/IP i gniazda siecioweProtokoy sieciowe, poprawna komunikacjaWebowe API i konsumpcja danych z sieciAplikacje serwerowe i ich wydajnoDynamiczne aplikacja z niskopoziomowym API (CGI i WSGI)
Podstawa dla kolejnych tematwOd serwera webowego do aplikacji CGI i WSGI w gr stosu
Stos webowy
Poziomy stosu webowegoMonta
gniazda sieciowe
-
protokoyWSGI / CGI
Narzdzia
cgitbwarstwy porednie WSGIWebOB, werkzeug tools
Mae frameworki
FlaskBottleCherryPyWeb.py
Pene frameworki
DjangoPyramidweb2py
Systemy
PloneDjango CMS
FrameworkiZ wikipedii:
Framework aplikacji webowej jest frameworkiem oprogramowania majcym na celuwsparcie tworzenia dynamicznych stron, aplikacji i serwisw webowych. Frameworkma za zadanie zmniejszy obcienie zwizane z typowymi czynnociamiwykonywanymi przy budowie aplikacji webowych. Na przykad wiele frameworkwdostarcza biblioteki do komunikacji z baz danych, korzystania z szablonw izarzdzania sesj uytkownika oraz czsto promuj reuywalno kodu.
Co to wszystko znaczy?
Framework suy do budowy aplikacjiFramework pozwala na budow aplikacji rnego typuFramework wprowadza pewn warstw abstrakcji i pozwala zaj si koniecznymi konkretami
Co do tej pory byo zbdnym narzutem?
Poziomy abstrackcji
Abstrakcja 1 / wolno
-
Im wicej robi, tym mniejsze masz pole manewruKady framework wybiera jak funkcjonalno realizuje i udostpniaKady framework dokonuje innych wyborw
Wane przy wyborze frameworka
Webowe frameworki pythonoweDjango Grok Pylons TurboGears web2pyZope CubicWeb Enamel Gizmo(QP) GlashammerKarrigell Nagare notmm Porcupine QPSkunkWeb Spyce Tipfy Tornado WebCoreweb.py Webware Werkzeug WHIFF XPRESSAppWsgi Bobo Botle CherryPy circuits.webPaste PyWebLib WebStack Albatross AquariumDivmod Nevow Flask JOTWeb2 Python ServletEngine Pyramid Quixote Spiked weblayer
Wybr frameworkaWiele osb mwi jest najelpszym frameworkiemW wikszoci wypadkw to znaczy Wiem jak uy W niektrych przypadkach naprawd znaczy to najlepiej pasuje do mojego mzgu
Kady mzg (i kady przypadek) jest inny!
Jak wybra?
Pierwsze prawo wyboru
Wybierz odpowiednie narzdzie do zadania
Odpowiednie narzdzie to takie, ktre pozwoli skoczy zadanie szybko i poprawnieJak znale odpowiednie narzdzie?
Drugie prawo wyboru
Nie dowiesz si pki nie sprbujesz
Flask
-
Pierwsze kroki
Przygotowanie rodowiska
$$ virtualenv flaskenv
$$ source flaskenv/bin/activate
(flaskenv)$$ pip install flask
Prosta aplikacja
intro.py
Uruchomienie aplikacji
(flaskenv)$$ python intro.py
http://localhost:5000
Debugowanie bdw
error.py
Uruchomienie na serwerze~/intro.wsgi
import sys
# doczenie do cieki wyszukiwania moduw# katalogu, w ktrym znajduje si aplikacja# najlepiej poza ~/wwwsys.path.insert(0, '/path/to/application/dir')
# aktywacja rodowiska wirtualnegoactivate_this = '/path/to/flaskenv/bin/activate_this.py'execfile(activate_this, dict(__file__=activate_this))
from intro import app as application
-
Konfigurowalno uWSGI
~/intro.ini
[uwsgi]socket = /tmp/.wsgi.sockchmod-socket = 666plugin = pythonvirtualenv = /path/to/flaskenvchdir = /path/to/application/dirmodule = intro:app
uwsgi intro.inihttp:///~/wsgi
Co si dzieje?Klasa Flask reprezentuje pojedyncz aplikacj w rozumieniu WSGIInicjalizacja klasy nazw pakietu lub moduu (zazwyczaj __name__)
flask uywa tego do poprawnej lokalizacji zasobw (pliki statyczne, szablony, dodatkowe moduydo importu)
Definicja funkcji z dekoratorami oznaczajcymi ciek dostpu (URL), ktra je wywouje
Routing URLDekorator routeMapowanie URL na punkt dostpowy (endpoint) / funkcjdanie pod dany URL wywouje zmapowan funkcjDynamiczne cieki
symbol zastpczy argument funkcji, np. /profile/konwertery zapewnienie poprawnoci typu, np. /div/
Filtrowanie po metodzie HTTPnp. @app.route('/blog/entry//', methods=['POST'])
routes.py
Odwracanie cieekTworzenie URL-i dla danego punktu dostpowego
nie trzeba hard-kodowa URL-i przy budowaniu odnonikwmoliwo zmiany URL-i bez zmiany kodu decoupling
Funkcja url_forwymaga kontekstu HTTP, ktry moe by imitowany
import routes
-
from routes import appfrom flask import url_forwith app.test_request_context(): print url_for('show_profile', username="adam") print url_for('divide', val=23.7)
'/profile/adam''/div/23.7/'
Generowanie HTML-aBudowanie za pomoc stringwWykorzystanie systemu szablonw
cay kod z miejscami do podmiany i powielenia w osobnym plikutyle szablonw ile frameworkwkady ma swoje zalety i wadyFlask zawiera system Jinja2
Podstawy Jinja2
Wypisanie zmiennych: {{ zmienna }}Dostp do elementu zmiennej
{{ zmienna[atrybut] }}{{ zmienna.atrybut }}
Wbudowane filtry: {{ zmienna|filtr }}Logika w znacznikach procesora: {% ... %}
np. {% for x in y %}{{ x }}{% endfor %}kady blok logiki musi mie swj pocztek i koniec
Dziedziczenie szablonwdefinicja rodzica, np. {% extends "layout.html" %}nadpisywanie blokw, np. {% block foo %}...{% endblock %}
Wicej informacji
Szablony we FlaskuFunkcja render_templatetemplates.pyFlask poszukuje szablonw w katalogu templates w tej samej lokalizacji, co modu aplikacji ( app = Flask(__name__))Wszelkie dodatkowe zmienne musz by przekazane argumenty jako sownikowe do funkcji renderujcej
Kontekst
-
config obiekt konfiguracyjny, session obiekt sesjirequest obiekt dania, g globalny obiekt w obrbie daniaget_flashed_messages funkcja zwracajce krtkie informacjeurl_for funkcja do odwracania URL-i
Trwao danychPaskie plikiBazy relacyjne (Postgres, MySQL, SQLServer)Skadnice obiektw (Pickle, ZODB)Bazy NoSQL (CouchDB, MongoDB)
Mae frameworki pozostawiaj t kwesti otwart
PrzykadProsty serwis mikroblogowyNa podstawie tutoriala na stronie FlaskaKod na BitBuckecie
Krok 1: Prosta baza SQL
PEP 249 DB APIImplementacja dla sqlite w bibliotece standardowejschema.sqlKonfiguracja i inicjalizacja w microblog.py
Krok 1: Testy!
Szalenie istotneNieoficjalny standardModu unittestmicroblog_test.py
Krok 2: Zarzdzanie poczeniami
Poczenie z baz powinno by otwarte jedynie na czas obsugi daniaDekoratory we Flasku:
@before_request@after_request@teardown_request
microblog.py
-
Krok 2: Zapis i odczyt wpisw
Test moliwoci dodania wpisu do bazy w microblog_test.pyFunkcja write_entry w microblog.pyTest odczytu wszystkich wpisw
dla pustej bazy w microblog_test.pydla baz z wpisami w microblog_test.py
Funkcja get_all_entries w microblog.py
Krok 3: Widoki
Test odpowiedzi strony gwnejprzy braku wpisw w microblog_test.pyze znanym wpisem w microblog_test.py
layout.htmlshow_entries.htmlWidok dla strony gwnej w microblog.py
Krok 4: Autentykacja
Testy logowaniadedykowanej funkcji
poprawnie w microblog_test.pybdnie w microblog_test.py
caego procesu w oparciu o widoki w microblog_test.pylogin.htmlWidoki
dla logowania w microblog.pydla wylogowania w microblog.py
Modyfikacja layout.html
Krok 4: Dodawanie wpisu
Test dodawania wpisu w microblog_test.pyWidok dla uytkownika microblog.pyModyfikacja show_entries.html
Krok 5: Upikszanie
style.cssModyfikacja layout.htmlZasoby statyczne (css, js, img) powinny by w katalogu static przy module aplikacji
-
Dalszy rozwj
Lepszy wygldOgraniczenie liczby wywietlanych wpisw na stronie gwnejDodanie sygnatury czasowej do wpiswMoliwo edycji dotychczasowych wpisw (wraz z dodaniem statusu aktualizacji)...Twitter ;)
PodsumowanieFrameworki uatwiaj prac
wsparcie dla mudnych i powtarzalnych czynnociskupienie si na specyfice aplikacji
Nie istnieje idealny framework, kady musi wybra najlepszy dla siebiePrzykad Flaska jako maego frameworka wspierajcego MVC
#6: Mae frameworki weboweMikoaj OlszewskiJakie pytania po lekturze?Podsumowanie tematw
Stos webowyPoziomy stosu webowegoMontaNarzdziaMae frameworkiPene frameworkiSystemy
FrameworkiCo to wszystko znaczy?Poziomy abstrackcjiWebowe frameworki pythonoweWybr frameworkaJak wybra?Pierwsze prawo wyboruDrugie prawo wyboru
FlaskPierwsze krokiPrzygotowanie rodowiskaProsta aplikacjaUruchomienie aplikacjiDebugowanie bdw
Uruchomienie na serwerzeKonfigurowalno uWSGI
Co si dzieje?Routing URLOdwracanie cieekGenerowanie HTML-aPodstawy Jinja2
Szablony we FlaskuKontekst
Trwao danychPrzykadKrok 1: Prosta baza SQLKrok 1: Testy!Krok 2: Zarzdzanie poczeniamiKrok 2: Zapis i odczyt wpiswKrok 3: WidokiKrok 4: AutentykacjaKrok 4: Dodawanie wpisuKrok 5: UpikszanieDalszy rozwj
Podsumowanie