Sunteți pe pagina 1din 13

Cursul 13

Python WSGI
13 ianuarie 2010
Mihai Maruseac
2
Common Gateway Interface
• CGI: delegare creare pagini web către alte aplicații
• CGI script
• 1993, RFC 3875
• Ex: un wiki
• Probleme:
erori de coding → code injection
proces nou
• Alternative:
FastCGI
Module Apache, IIS ISAPI plugins
WSGI
3
Python Web Server Gateway Interface

• Low-level față de CGI


• Scalează și lucrează în medii multiproces sau multithread
• strat între aplicație și web server
• Nu server web
mod_wsgi, Paste, CherryPy, wisgiref.simpleserver
• Nu web framework
Django, Pylons, etc

4
WSGI – Introducere

• 2003, PEP 333 (Python Enhancement Proposal)


• Interfața standard între aplicații web în Python și servere
web (Java servlets)
• 2 componente obligatorii:
server/gateway
framework/ aplicație
• opțional componente middleware
• tip nou de dezvoltare aplicații web: componente
middleware cuplate între ele
5
WSGI – PEP 333 (1)

• Application side: doar un obiect callable


• 2 argumente; apeluri multiple
• Exemplu1: Hello World
• environ: toată informația despre request, informații de la
alte layere
• start_response: antete de răspuns
• return: neapărat un iterator (răspuns în bucăți)

6
WSGI – PEP 333 (2)

• Server side: apelează un callable object oferit de aplicație


(obiect ce are o metodă __call__)
• Nu se specifică cum va fi oferit acest obiect
• Exemple de obiecte callable: funcții, metode sau instanțe
ale unor clase ce conțin metoda __call__
• Se invocă obiectul pentru fiecare cerere HTTP
• Exemplu2: server fișiere

7
WSGI – PEP 333 (3)

• Middleware: componente ce joacă ambele


roluri

• rutare, load-balancing, autentificare, error


handling, etc

• Prezență transparentă celorlalte


componente

• Pot fi înlănțuite

• Exemplu 3: jurnalizare evenimente

8
WSGI – PEP 333 (4)

• Pentru eficiență s-ar folosi buffering


• Se întoarce un singur element, iterabil
• Transmisie în blocuri
• Fara intarzieri
• Unicode: HTTP nu-l suportă → nici WSGI
• Python are Unicode

9
Integrare cu un server web

• Wrappers
• IIS: isapi-wsgi
• Apache: mod_wsgi, mod_python
• mod_python: din ce în ce mai puțin dezvoltat,
nerecomandat
• wsgiref: zeroconf server (simple_server)

10
Demo Bonus

• Avem o aplicație sub forma unui applet java


• Vrem să ascundem sursele
• Blocăm listarea conținutului directorului
• Sursele pot fi descărcate
• Nu le putem face unreadable şi nici nu putem face director
ne-executabil (nu ne va mai rula aplicația)
• Solutia: nu dăm link-ul direct către applet, mini dispatcher
WSGI

11
Bibliografie

• http://en.wikipedia.org/wiki/Common_Gateway_Interface

• http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface

• http://pythonpaste.org/do-it-yourself-framework.html

• http://groovie.org/2005/10/06/wsgi-and-wsgi-middleware-is-easy

• http://www.python.org/dev/peps/pep-0333/

• http://lucumr.pocoo.org/2007/5/21/getting-started-with-wsgi

• http://www.xml.com/pub/a/2006/09/27/introducing-wsgi-pythons-secret-web-
weapon.html

• http://webpython.codepoint.net/web_python_tutorial

• http://grep.ro/quickpub/rtt-wsgi

12
The End

?
07.01.09 13

S-ar putea să vă placă și