[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