[2s.mk-friends] Сподели Знаење сабота

Дамјан Георгиевски penguinista at mail.net.mk
Sun Jul 5 14:39:00 UTC 2009


> Агенда?
>  - може да го покажам мојот мини-python-web-framework - се вика die-django

ова прерасна во опишување на WSGI моделот на пишување Python web апликации, па 
краток осврт на do it yourself web framework во Python (не е тешко воопшто), 
па потоа го покажав мојот не-баш-framework т.е. object publishing system.

Повеќе за WSGI и за тоа како се прави framework (т.е. што се вклучува еден 
framework) има во одличниот текст на Iаn Bicking [1]. На кратко:

WSGI е просто API кое го решава проблемот на постоење најразлични web сервери 
(Apache, IIS, nginx, lighttpd, cherokee, итн) и најразлични начини на 
хостирање Python апликации во нив (mod_python, mod_wsgi, CGI, FastCGI-МастПГИ, 
SCGI, http proxy итн итн). WSGI дефинира унифициран интерфејс помеѓу еден Web 
server и Python web апликација.

Python Framework-ите се надоврзуваат врз WSGI и неговиот едноставен интерфејс, 
и овозможуваат поедноставно и поелеганто креирање на web апликации. Задачите 
на еден типичен MVC (model-view-controller) framework отприлика би биле:
 - парсирање на http request-от, елегантен пристап преку објектен wrapper
 - рутирање на url-а кон некоја функција, класа, генерално некој код-
controllers (ова уште се вика и object publishing)
 - генерирање на url-а (ова е обратното од рутирањето)
 - templating, за да не го пишуваме html-от измешано со python кодот
 - session handling
 - caching
 - authentication/authorization
 - model handling / database connection pools итн
 - online debuger / фаќање и логирање на грешки и сл.
 - креирање и валидација на форми



Од сево ова, мојот „framework“ уствари само прави REST рутирање на url-а во 
класи и генерирање на url-а. Базиран е на Werkzeug[2] па од него наследува и 
Request и Response wrapper-и за полесна работа со http протоколот. За 
templates може да се користи било што, јас преферирам Genshi[3] (но може да се 
користи и Mako, Jinja2, итн.). Сите други точки од горе може независно да се 
имплементираат со некој WSGI middleware или други Python библиотеки, па затоа 
јас немав потреба да ги имплементирам.

Еден прост пример:

# example.py
from webpylike import Response, expose

@expose("/")
class index:
    def GET(self, req):
        return Response(u'Hello World!')


@expose("/about/", defaults={'who': u'ништо'})
@expose("/about/<who>")
class about:
    def GET(self, req, who):
	return Response(u'Ова е страна за %s.' % who)


оваа глупа апликација се старта на следниов начин:
$ python
>>> from werkzeug import run_simple
>>> from webpylike import WebPyApp
>>> import example
>>> app = WebPyApp()
>>> app.publish(example)
>>> run_simple('', 5000, app, use_debugger=True, use_reloader=True)

и после може да се отворат следните URL-a:
http://localhost:5000/
http://localhost:5000/about/
http://localhost:5000/about/мене


...
па доста беше .. ако некој го интересира повеќе, I'm here to talk, а може пак 
да го повториме истово на СподелиЗнаење.



[1] Do-It-Yourself Framework:
    http://pythonpaste.org/webob/do-it-yourself.html
[2] Werkzeug - WSGI библиотека со корисни рутини, документација:
    http://werkzeug.pocoo.org/documentation/0.5/
[3] Genshi - XML templateing јазик:
    http://genshi.edgewall.org/
[3] Мојот framework in progress во дрвото на Vezilka: 
    http://damjan.softver.org.mk:8080/git/Vezilka/tree/vezilka/lib/webpylike.py?h=werkzeug


-- 
дамјан ( http://softver.org.mk/damjan/ )

  Begin...the rest is easy.



More information about the Ossm-members mailing list