WSGI

Autorius:Dalius Dobravolskas
Data:2009-04-23

Įžanga

WSGI specifikacija:

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

Padarysime kažką panašaus į Big Picture:

http://www.boston.com/bigpicture/

Paprasta WSGI aplikacija

Kaip atrodo paprasta WSGI aplikacija?

def simple_app(environ, start_response):
    """Simplest possible application object"""
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world!\n']

virtualenv

Aplinkos izoliavimas. Naudinga, nes dažniausiai skirtingi projektai turi skirtingus reikalavimus.

sudo easy_install virtualenv
mkdir bigpicture
cd bigpicture
virtualenv .
source bin/activate

pip

easy_install pakaitalas http://pypi.python.org/pypi/pip

easy_install pip

Naudojimas:

pip install ....
pip install -r requirements.txt

wsgiref

Paprasta WSGI implementacija. Ji neskirta viešam naudojimui, bet kai kas naudoja.

from wsgiref.simple_server import make_server
from bigpicture.app import simple_app

make_server('', 8080, simple_app).serve_forever()

WebOb

Supaprastiname WSGI naudojimą.

http://pythonpaste.org/webob/

from webob import Response, Request
req = Request(environ)
resp = Response()

nose ir WebTest

WSGI aplikacijų Unit testing'as.

from webtest import TestApp
from bigpicture.app import simple_app
def test_get_values_show_up():
    app = TestApp(simple_app)
    resp = app.get('/?test=123')
    assert 'test' in resp.body

static

Statinių failų pateikimas.

from static import Cling
simple_app = Cling('bigpicture/static')

Paste

http://pythonpaste.org/

Kaskada:

from paste.cascade import Cascade
Cascade([static_app, dynamic_app])

PonyMiddleware

Paste galima rasti netgi ponį.

from paste.pony import PonyMiddleware

URL valdymas

Galima rasti ne vieną sprendimą:

Routes

Rails tipo URL valdymas:

from routes import Mapper
from routes.middleware import RoutesMiddleware
...
map = Mapper()
map.connect(':id')

WebError

Oficialaus puslapio adreso neturiu, bet tikrai naudingas modulis.

from weberror.evalexception import EvalException

mod_wsgi

http://code.google.com/p/modwsgi/

Autorius: Graham Dumpleton

Paprasta instaliuoti.

Gerai dokumentuota.

Kas Toliau? (1)

Template'ams galima naudoti: genshi arba mako

Duombazės valdymui rekomenduoju SQLAlchemy arba naudoti tiesiog pliką DB API (Python'e jis visoms DB toks pats, išskyrus ODBC).

Pakankamai skausminga vieta autentikacija/autorizacija.

Kas toliau? (2)

Klausimai

?