Ahoj,

zkusím ti to nejdřív nějak vysvětlit, pak ti odpovím na tvé konkrétní otázky a 
závěr ještě něco přidám. Sorry, vzhledem k formulaci a vlastně samotné 
existenci dotazu jsem se trochu více rozepsal.

Pro jistotu zde uvedu definici WSGI: je to lepidlo, pomocí kterého se slepí 
webový server a webový framework/webová aplikace; je to proto, aby každá 
aplikace/každý framework nemusel znovu a znovu implementovat HTTP, FastCGI, CGI 
atd. Místo toho jen webserver nebo FastCGI server nebo CGI handler (nebo 
cokoliv) jen poskytne WSGI rozhraní a aplikace/framework už se tím nemusí 
zabývat.

Ale stále toho k zabývání se ještě spousta zbývá. WSGI je low-level a nedělá 
nic jiného, než co jsem právě popsal. Mohl bys WSGI vzít a přidat do něj nějaké 
hezčí zpracování uploadu souborů, mohl bys do něj přidat spojení do databáze, 
logování atd., ale to už by pak nebylo hezké rozhraní, ale pěkný moloch. Byl by 
to webový framework. Úkolem WSGI není být webovým frameworkem, ale umožnit 
webovým frameworkům fungovat nezávisle na tom, jestli budou spuštěny přes CGI, 
FastCGI nebo nějak jinak.

Takže:

1. pokud chceš v Pythonu dělat weby, nedělej je čistě ve WSGI, ale najdi si 
knihovnu nebo framework, která bude řešit ty nejotravnější věci (upload souborů 
apod.) Může to být buď full-stack framework jako třeba Django nebo Pylons, nebo 
to může být knihovna, která dělá primárně právě jen tohle, např. Werkzeug, 
Paste WebOb, yaro, ... Je toho mraky. Mezi tím jsou ještě další věci, např. 
CherryPy. A pak ještě speciality, jako Zope nebo Twisted.

2. statistiky na webu bývají pochybné kvality, nejlepší je se o výkonu něčeho 
přesvědčit sám. Na co psát něco ultra-efektivně, když tam stejně poleze jen 
deset lidí denně - místo toho to dělej tak, abys z toho měl sám radost a měl s 
tím co nejméně práce. Na druhou stranu, pro jakýkoliv dobře nakonfigurovaný 
způsob nasazení webové aplikace by neměl být problém zvádnout stovky požadavků 
za sekundu, a pokud bude požadavků více, stejně při takovém provozu se už asi 
dávno budeš poohlížet po dalším železe.

3. že nechceš používat mod_python já osobně chválím :) I když pro to mám jiné 
důvody, než statistiky na webu. WSGI je univerzálnější. (Ne že by v mod_pythonu 
nešel použít WSGI handler, věřím, že je zde řeč o standardním mod_python 
publisheru.) Mimochodem, abychom předešli obvyklému počátečnímu zádrhelu - WSGI 
není to samé, co mod_wsgi. Jedno je rozhraní a druhé je jedna z implementací 
tohoto rozhraní pro Apache.

4. proč ti nefunguje ten print samozřejmě nevím, ale vzhledem k tomu, že print 
vypisuje na standardní výstup, asi to bude tím, že svoji aplikaci spouštíš 
pomocí něčeho, co ten standardní výstup zavírá. Třeba kdybych já pomocí printu 
něco napsal, tak se mi to vypíše rovnou do konzole, kde je webovka spuštěná 
(tedy ne uživateli do prohlížeče), a na serveru standardní výstup bývá (když 
není zavřený) přesměrovaný do /dev/null, takže se to zapíše víš kam. Používat 
print ve webové aplikaci lze jen na ladění, jinak je to asi stejný nesmysl jako 
používat ho v GUI aplikacích. Jo a jestli si chtěl napsat něco jako 
print("<html>... kilobajty balastu ...</html>"), tak použij šablonu, je to o 
dost jednodušší a přehlednější :)

Co by měl být tvůj další krok - doporučuji se podívat na Django. Je tu dost 
příznivců a uživatelů Djanga, takže i z tohoto pohledu je to perspektivní.

Kdybys nechtěl jít do Djanga, tak se zkus třeba podívat na 
http://werkzeug.pocoo.org/ a rozklikni si to "click here to see ...", je tam 
docela pěkná ukázka. Jak vidíš, snadno získáš objekt Request, ve kterém je vše 
co potřebuješ, odpověď vracíš objektem třídy Response a co děláš mezi tím je na 
tobě, to ti jako PHP programátorovi přijde asi bližší. Werkzeug není zrovna 
hodně používaná věc, ale mě se líbí, lze na ni demonstrovat, jak to dělat 
snadno a bez frameworkového molochu, proto to zde uvádím. Takových podobných 
nástrojů jako Werkzeug je více.

Vůbec pro PHP programátora bude asi největší problém to, že dělat něco v 
Pythonu nebo Ruby neznamená jen naučit se jazyk a třeba jen jeden způsob jak to 
zprovoznit, ale už při čtení prvního tutorialu se na tebe valí věci jako ORM, 
MVC, URL routing, testování, ideálně ještě základy Linuxu/BSD/.... Tím se 
nenech odradit.

Takže přeji hodně štěstí, ale stojí to za to :)

PM


PS. předpokládám, že tvůj další dotaz do této konference bude, kde na to najít 
hosting :)

On 24.4.2010, at 16:01, Thomix wrote:

> Zdravím,
> 
> už několik let programuju v php. Poslední dobou šilhám po python pro
> web. Nainstaloval jsem si modul WSGI a zkusil si par tutoriálů. Ovšem
> mám problém.
> 
> Např.:
> 
> def application(environ, start_response):
>    status = '200 OK'
>    output = 'hl'
> 
>    response_headers = [('Content-type', 'text/plain'),
>                        ('Content-Length', str(len(output)))]
>    start_response(status, response_headers)
> 
>    return [output]
> 
> Tomuto celkem rozumím ale nechapu jak v tom více programovat ??? Když
> si napíšu print("neco"); napiše to chybu a dále se to semnou nebaví.
> 
> Viz.:
> 
> def application(environ, start_response):
>    status = '200 OK'
>    output = 'hl'
>    print("neco");
> 
>    response_headers = [('Content-type', 'text/plain'),
>                        ('Content-Length', str(len(output)))]
>    start_response(status, response_headers)
> 
>    return [output]
> 
> Nějak nechápu v čem je problém. Mod_python nechci používat z důvodu
> slabé odezvialesponň dle statistik co jsem četl na internetu. Mohl by
> mě prosím někdo objasnit alespoň základ psaní ve WSGI ?
> 
> Děkuji :)
> _______________________________________________
> Python mailing list
> Python@py.cz
> http://www.py.cz/mailman/listinfo/python

_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem