PythonParaWeb

Artigo incompleto que pode conter informações equivocadas: favor, ao encontrar um erro: edite, apague, ou envie um e-mail, etc :-) Obrigado.

Este artigo é uma opinião do autor que através de sua breve experiência com Python visa sanar alguma dúvidas sobre programação web utilizando-se o Python.

Django

"Django é um framework para web, de alto nível desenvolvido em Python, seguindo as filosofias de desenvolvimento rápido, limpo e com design pragmático".

Desde seu início o foco do Django foi desenvolvimento rápido e inteligente para web, juntando isso com as melhores práticas e ferramentas para web em um framework.

A rapidez no desenvolvimento utilizando Django é modelada de acordo com o princípio DRY - Dont Repeat Yourself, evitando ao máximo códigos duplicados e gerando um ganho de agilidade excelente no ciclo de desenvolvimento web.

Django utiliza MVC e outros padrões, muito bem aceitos por toda a comunidade, em sua filosofia de desenvolvimento, o que leva a fácil manutenção, melhor legibilidade dos códigos e simplicidade.

Django é formado pelos principais compontes necessários para um framework web e muito mais, como mapeamento objeto relacional, sistema de administração, sistema de templates, sistema de cache, suporte para internacionalização e mapeamento elegante de urls.

Todos os componentes são altamente integrados, já que os componentes não são de terceiros, proporcionando ótima integração entre as partes do framework, com maior coerência e coesão.

Características

Mais informações

No Site Oficial e Django Book.

Grupos Grupo de usuários Oficial Django-users e Grupo de usuários brasileiros Django-brasil

Documentação em Português

Fontes de estudo

Fontes de estudo link

web2py

http://web2py.com/examples/static/web2py_logo.png

=== O que é web2py ====

web2py é um framework para desenvolvimento Web escrito em Python, software livre e gratuito, que tem como um de seus principais objetivos agilidade no desenvolvimento de aplicações Web seguras, baseadas em banco de dados.

O framework segue o modelo MVC (Model-View-Controller), que permite melhor organização do código; ele também é autocontido: tudo o que você precisa para desenvolver alguma aplicação está nele: basta baixar e descompactar para começar - nada de configurações!

Com o foco em deixar o desenvolvedor pensar apenas na aplicação em que está desenvolvendo, o web2py possui intregração com mais de 10 sistemas de banco de dados, e vários subssistemas, como: criação automática de formulários com validação automática, autenticação e autorização, gerador de códigos AJAX para melhor interação do usuário com a aplicação, upload seguro de arquivos, sistema de plugins, integração com vários padrões Web (XML, RSS etc.), dentre outros.

Princípios

O web2py leva em consideração todas as questões referentes a segurança da aplicação web, e isso significa que o framework se preocupa em tratar as vulnerabilidades aplicando práticas bem estabelecidas como por exemplo validando formulários prevenindo injeção de código malicioso, efetuando o correto escape da saida HTML para prevenir ameaças como o cross-site scripting, renomeia os arquivos de upload utilizando hash seguro. O web2py automaticamente toma conta de questões de segurança. Segurança do web2py www.pythonsecurity.org/wiki/web2py/ O web2py possui uma camada de abstração de banco e dados (DAL) que gera dinâmicamente todo o código SQL. a classe DAL pode se conectar e lidar de forma transparente com diversos bancos de dados como MSSQL, MYSQL, POSTGRES, ORACLE, MONGODB, GOOGLE BIG TABLE.

O web2py pode ser executado com CPython ( a implementação padrão da linguagem Python implementada em C ) ou com Jython ( a implementação do Python escrita em Java), Funciona com quase todos os seus recursos na plataforma gratuita de hospedagem de aplicações do Google; o GAE ( Google App Engine ).

Uma outra caracteristíca do web2py, é o compromisso com a compatibilidade em versões futuras, e este compromisso tem sido mantido desde a primeira versão, isso significa que aplicações desenvolvidas em uma versão especifica do framework funcionarão em versões mais recentes sem que seja necessário nenhuma alteração de código.

A linguagem Python tipicamente segue os seguintes princípios

Diferente de outros frameworks, o web2py aplica parcialmente o terceiro princípio, com a intenção de prover o desenvolvimento ágil o framework efetua configurações, importa módulos e instância objetos globais como session,request,cache,T e tudo isso é feito automaticamente, tentando ao máximo evitar que o desenvolvedor tenha importar os mesmos módulos e instanciar os mesmos objetos no inicio de cada model ou controller.

Efetuando essas operações automaticamente o web2py evita problemas, e mantém o princípio de não se repetir e de que deve existir apenas uma maneira para se fazer algo.

Porém, se for desejo do desenvolvedor este comportamento pode ser alterado, e em qualquer cenário é possível importar módulos como em qualquer outra aplicação ou framework Python.

Comunidade

A comunidade web2py tem como maior canal a lista mundial em inglês "web2py" no google groups e também a lista em português "web2py-users-brazil", além disso o grupo no facebook http://facebook.com/web2py e o http://www.web2pyslices.com

Quem usa?

No Brasil temos casos de uso na Petrobrás, Groupon Brasil, Prefeitura de São Paulo, Visie Padrões Web, Blouweb Consultoria, Bolsa de Valores de SP (BOVESPA), Governo da Paraíba e diversos outros sites e aplicações desenvolvidas com web2py ou que utilizam bibliotecas do web2py a lista completa está em http://www.web2py.com/poweredby

Fontes de estudo

Fontes de estudo: link

TurboGears

TurboGears é um framework para desenvolvimento web que tem como característica a flexibilidade, por utilizar diversas tecnologias já existentes em sua construção.

Esta modularidade do TurboGears também permite que se possa utilizar outras tecnologias além daquelas [1]"nativas" do framework.

Características

O TurboGears é formado pelos seguintes componentes:

Estes componentes não são obrigatórios. Pode-se usar, por exemplo, o Cheetah no lugar do Kid, ou SQLAlchemy no lugar do SQLObject e assim por diante.

Mais informações

Página oficial e Comunidade brasileira

1. Coloquei "nativas" entre aspas porque não são realmente nativas, são aplicações independentes que foram agrupadas em um framework pelo pessoal do TurboGears

Pylons

Pylons é um framework para desenvolvimento de aplicações web focado em rapidez e flexibilidade. Sua principal característica é o suporte ao padrão WSGI (Web Server Gateway Interface), possibilitando escrever aplicações portáveis entre diversos servidores web. O suporte a WSGI é provido pela integração entre o Pylons e o Paste.

Características

É formado atualmente pelos seguintes componentes:

Essa é a composição de um projeto Pylons básico, mas como o framework é de certa forma bem 'desmontável', cada projeto Pylons poderá conter um conjunto diferente de bibliotecas. Por exemplo, Authkit para autenticação, SQLAlchemy para mapeamento objeto-relacional, Elixir, que provê uma interface estilo ActiveRecord sobre o SQLAlchemy, ToscaWisgets, um spin-off do TurboGears para a criação de formulários, e outros mais.

Mais informações

Webware

Se ainda houver algum erro, favor notificar!

Uma das ferramentas mais conhecidas pelos pythonicos para desenvolver aplicativos web. É simples e com nível de aprendizado baixo, tanto para pythonicos quanto para aqueles que estão migrando, seja vindo do JSP, PHP ou ASP e outros servlets.

PS: esta sessão do Webware foi corrigido pelo Michel Thadeu. Obrigado! (tava tudo errado o que escrevi hahaha) :-)

Características

O webware lhe permite o desenvolvimento de servlets, tags <% %> (através de um outro modulo) e mais uma infinidade de outras opções ... mas a principal finalidade é mesmo para o desenvolvimento de servlets. Não tenho ainda idéia de como funciona sua arquitetura, qualquer informação seria muito bem vinda.

Possuí ótima integração com outros módulos Python, como o Cheetah para template-engine, etc.

Pode ser um pouco doloroso trabalhar o webware com webdesigners se não tiverem muita experiência, mas existem algumas manhas para contornar isto.

Para Rever

Código exemplo

Um simples código hello world servlet:

   1 from WebKit.Servlet import Servlet 
   2 class Hello(Servlet): 
   3    def respond(self, trans): 
   4        trans.response().write('Content-type: text/html\\n\\nHello, world!\\n') 

Agora um código PSP:

<% page extends="Modelo"%>
<% page method="writeContent"%>
<psp:method name="title">return 'The Title'</psp:method>

Criação de servlets-base através do Cheetah:

#extends Base.Base
#implements writeHTML
#attr $titulo='um título'

<h3>O título é: $titulo</h3>

<p>
#block writeBody
O conteúdo pode ser substituído substituindo-se o método writebody, num
template bastaria omitir a tag #implements.
#end block writeBody
</p>

Gerando um template +- (como diria o Michel :-P ) assim:

   1 class Pagina(Base):
   2   titulo='um título'
   3   def writeHTML(self, **kw):
   4     self.write('<h3>O título é: %s</h3>' % self.titulo)
   5     self.writeBody(**kw)
   6   def writeBody(self, **kw):

Prós

Contras

Segurança

Tá aí algo para arrumar :-)

Mais Informações

Visitem a página do Webware. Ou veja outras informações em WebwareRapidinho.

CherryPy

CherryPy é um framework para desenvolvimento de aplicações web extremamente pythônico. Com ele pode-se desenvolver utilizando todos os recursos da orientação a objetos de Python, ficando bem transparente entre o "problema e o programador".

Características

A principal característica do Cherrypy é que ele separa o código do layout HTML. Possuí um webserver embutido (que pode ser integrado ao Apache de diversas formas) e é altamente integrável com outros módulos Python (até mesmo o Cheetah). Ele funciona da seguinte maneira: ao invés de http://localhost/sub/index ser o arquivo index dentro do subdiretório sub; index() é uma função dentro da classe Sub. Piece of cake :-)

Código exemplo

   1 CherryClass Root: 
   2 mask: 
   3     def index(self, name="you"): 
   4         <html><body> 
   5             Hello, <b py-eval="name"></b> ! 
   6             <form py-attr="request.base" action="" method="get"> 
   7                 Enter your name: <input name=name type=text><br> 
   8                 <input type=submit value=OK> 
   9             </form> 
  10         </body></html>

Se você assustou-se com este exemplo, não se preocupe, este código utiliza a ferramenta de templating CherryTemplate o uso dela é opcional; você pode utilizar várias outras, dentre elas, ZPT, Cheetah e PyMeld.

   1 """
   2 Tutorial - Passing variables
   3 
   4 This tutorial shows you how to pass GET/POST variables to methods.
   5 """
   6 
   7 import cherrypy
   8 
   9 
  10 class WelcomePage:
  11 
  12     def index(self):
  13         # Perguntando pelo nome de usuário.
  14         return '''
  15             <form action="greetUser" method="GET">
  16             Qual é o seu nome?
  17             <input type="text" name="name" />
  18             <input type="submit" />
  19             </form>'''
  20     index.exposed = True
  21     
  22     def greetUser(self, name = None):
  23         # CherryPy passa todas as variáveis GET e POST como se fossem parâmetros de métodos.
  24         
  25         if name:
  26             # Cumprimentando o usuário!
  27             return "Qual é, %s?" % name
  28         else:
  29             if name is None:
  30                 # Se não for passado um nome
  31                 return 'Por favor, coloque seu nome <a href="./">aqui</a>.'
  32             else:
  33                 return 'É sério, coloque seu nome <a href="./">aqui</a>.'
  34     greetUser.exposed = True
  35 
  36 
  37 cherrypy.tree.mount(WelcomePage())
  38 
  39 
  40 if __name__ == '__main__':
  41     import os.path
  42     cherrypy.config.update(os.path.join(os.path.dirname(__file__), 'tutorial.conf'))
  43     cherrypy.server.quickstart()
  44     cherrypy.engine.start()

O exemplo acima demonstra como é o uso "puro" do CherryPy, a geração de HTML serve apenas para demonstrar de forma simples alguns aspectos fundamentais, como a passagem de variáveis GET e POST por meio dos parâmetros do método greetUser e o mapeamento da URL com os métodos. Note que se você deseja colocar um "diretório", é só você adicionar uma nova classe dentro da classe acima.

Existe também a possibilidade de um método atuar antes ou depois que da chamada aos métodos da classe, assim fica muito fácil abstrair camadas visuais ou conversões/validações aos dados que estão entrando ou saindo. Existem vários filtros que vem junto com o CherryPy para trabalhar com XML-RPC, GZip, Unicode, etc..

Prós

Contras

Segurança

A segurança do Cherrypy foi muito bem elaborada! O programador poderá se preocupar mais com funcionalidades do que com a segurança, uma vez que dificilmente um cracker/hacker/n00b/kiddie poderá detonar o seu servidor do jeito que se detona um PHP/ASP/JSP ou semelhante. Desculpem a falta de aprofundamento quanto ao quesito segurança, estou apenas citanto características muito superficialmente. Mas pelo que andei vendo sobre o Cherrypy, sua segurança é ótima, recomendado.

Cherrypy VS ...

Mais Informações

No website do Cherrypy, que contém ÓTIMA documentação.

Quixote

O Quixote é uma framework web para Python, muito utilizada por alguns pythonicos mas não muito difundida no resto da comunidade.

Características

O Quixote também separa código do template, mas como não tive nenhuma experiência com o mesmo (apenas leituras), vou apenas citar poucas coisas. De acordo com a documentação, funciona através de CGI ou Fast CGI, mas deve funcionar com mod_rewrite, mod_proxy, etc.

Código exemplo

Exemplo de código:

   1 from quixote import enable_ptl, Publisher
   2 
   3 enable_ptl()
   4 app = Publisher("quixote.demo")
   5 app.setup_logs()
   6 app.publish_cgi()

Exemplo de template:

template barebones_header(title=None, 
                          description=None): 
    """ 
    <html><head> 
    <title>%s</title> 
    """ % html_quote(str(title)) 
    if description: 
        '<meta name="description" content="%s">' % html_quote(description) 
    '</head><body bgcolor="#ffffff">' 

Prós

Contras

Mais Informações

No website do Quixote.

Twisted Woven

O Twisted Woven é uma framework web para Python embutida no Twisted Matrix. Aparenta ser muito poderosa, porém descontinuada e ainda instável. O projeto passsou para mão de outra equipe. Passou a se chamar Nevow, e é mantido pelo Divmod.

Creio que o projeto não foi descontinuado. O Twisted 2.0 foi liberado em 22/03/2005 e parece que vale a pena analisá-lo - http://twistedmatrix.com. (RômuloCampelo - 08/04/2005)

Código exemplo

Template HTML:

  <html>
    <body>
      <h3 model="name" view="Text" />
      <div model="stuff" view="List">
        <span pattern="listItem" view="Text" />
      </div>
    </body>
  </html>

Modelo:

   1 model = {
   2       'name': 'Welcome to Woven',
   3       'stuff': [
   4         'Foo',
   5         'Bar',
   6         'Baz'
   7       ]
   8     }

Ou o código completo:

   1 from twisted.web.woven import page
   2 
   3 model = {'name': 'Welcome to Woven', 
   4          'stuff': ['Foo', 'Bar', 'Baz']}
   5   
   6 template = """<html>
   7   <body>
   8       <h3 model="name" view="Text" />
   9       <div model="stuff" view="List">
  10         <p pattern="listItem" view="Text" />
  11       </div>
  12     </body>
  13   </html>
  14 """   
  15 
  16 resource = page.Page(model, template=template)

Mais informações

No website do Woven. Curiosidade: acredite se quiser, mas pelo que li sobre o Twisted Matrix, é que o seu website roda em uma SDSL de 768 Kbps, por isso um tanto lento :-) .

Divmod Nevow

Ah, uma boa pedida. O Nevow é a ferramenta perfeita para integrar trabalhos em equipe, separando o webdesigner do programador. Como deu para notar, o Nevow vem do Woven, por isso a semelhança nos nomes (um é o exato contrário do outro).

Características

A principal caracterísitas do Nevow é sua capacidade de dividir o código e o layout HTML, uma vez que os templates do Nevow são extremamente amigáveis, sendo a curva de aprendizado para webdesigners sem experiência com programação minima. O método como funciona é muito parecido com o Cherrypy, subdividido em classes e funções, ao invés de arquivos e subdiretórios (assim como o Woven, etc).

Código exemplo

Pacote fechado! ;-)

Prós

Contras

Segurança

Funciona exatamente como o Woven, portanto, possui um esquema semelhante ao Cherrypy. Sendo assim, recomendadíssimo! :-)

Para Rever

Se o Nevow funcionar da mesma maneira do Cherrypy, tanto na integração com o Apache quanto em boa parte dos opcionais, com certeza será algo para ser usado. (Desculpem a falta de informação, acabei descobrindo o Nevow e o Woven ontem durante a noite!).

Mais Informações

No website do Nevow.

Spyce

Bom, o Spyce é uma das melhores ferramentas para criação de PSP (Python Server Pages). É muito parecido com o Webware e o PSP do mod_python, e sim, (opcionalmente) misturando código com layout e tudo mais, por meio de tags e.

Características

Um dos recursos "matadores" dele é o suporte a taglibs, de uma forma muito fácil de trabalhar (muito mais que em JSP) e com separação entre código e layout. Além disso, ele possui as SpyLambdas, que são blocos de template do Spyce que podem ser tratados como funções. E recentemente foi adicionado um recurso chamado Active Handler, que facilita o MUITO o tratamento de dados vindos de formulários.

Igualmente às outras ferramentas de templating, o Spyce pré-compila os códigos em bytecodes antes de executá-lo, porém não requer que o programador execute algum comando para gerar a versão compilada, isso é automático. Também, a atualização a mudanças no código e nos módulos das taglibs são detectadas se a opção de debug estiver habilitada.

Código exemplo

<html><body>
  Hello [[print 'world!',]]
  [[ for i in range(10): { ]]
    [[=i]]
  [[ } ]]
</body></html>

Vide exemplos bem melhores [http://spyce.sourceforge.net/docs/eg.html aqui].

Prós

Contras

Mais informações

No website do Spyce.

mod_python

O Mod_python é um módulo para integração do Python com o servidor Apache (e somente o Apache). Ele é um programa de extremo baixo nível para lidar com o HTTP e o Apache - o que significa que o programador tem a opção de lidar com várias das sutilezas do protocolo HTTP e implementar tratadores em python para cada uma delas.

Possivelmente é a ferramenta mais indicada a se usar quando se for fazer um sistema baseado em WEB (em oposição a um simples "SITE") possibilitando o desenvolvimento de formas inovadoras de interagir com o servidor e com o HTTP.

Em suas versões mais recentes, para o Apache 2, há também uma versão de Python Server Pages (PSP) que possibilita o uso de Tags do tipo <% e %> para misturar código Python com HTML. No entanto o uso de PSPs é opcional, e em grande parte dos casos elas são usadas apenas como templates (ou seja, justamente para separar o HTML do código).

Tem uma documentação razoável, mas a curva de aprendizado é bem inclinada.

Prós

Contras

Mais Informações

No site do mod_python.

Python Servlet Engine

O Python Servlet Engine (PSE) é um framework para o desenvolvimento rápido de aplicações Web. É escrito em Python e utiliza o mod_python rodando sobre o servidor Apache. Compila os templates para byte code Python produzindo páginas web que executam muito rápido.

Cada servlet tem dois componentes: o template e o módulo de código Python. Esta arquitetura permite a separação da apresentação e da implementação, de forma que o webdesigner e o programador possam trabalhar de maneira independente. Também pode ser codificado no estilo normalmente usado pelos programadores PHP.

A seguir são exibidos dois trechos de código escritos em PHP e Python que realizam a mesma função. Este exemplo foi do artigo "User-Friendly Form Validation with PHP and CSS" de Jeff Cogswell, publicado no ONLamp.com em 22/04/2004. Algumas alterações foram feitas para corrigir alguns erros constantes do original. Os dois trechos foram codificados no mesmo estilo, não tendo sido utilizado o modelo PSE que permite a separação dos códigos Python e HTML.

Código exemplo PHP

<!-- From "User-Friendly Form Validation with PHP and CSS" at
     http://www.onlamp.com/pub/a/php/2004/04/22/php_css_forms.html -->
<?
    $message    = "";
    $emailclass = "basictext";
    $username   = "";

    if ($_POST['process'] == 1) {
        $pattern = '/.*@.*\..*/';
        $email   = $_POST['email'];
        $urlname = urlencode($$_POST['username']);

        if (preg_match($pattern, $_POST['email']) > 0) {
            // Here's where you would store
            // the data in a database...
            header(
              "location: thankyou.php?&username=$urlname");
        }
        $message    = "Please enter a valid email address.";
        $username   = $_POST['name'];
        $emailclass = "errortext";
    }
?>

<html>
<style>
    .basictext {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 14px; color:#000066;
    }
    .errortext {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 14px; color:#C00000; font-weight: bold;
    }
</style>
<body>
<form action="email.php" method="post">
    <? if ($message != "") {
        print '<span class="errortext">'.
            $message."<span><br>\n";
    }
    ?>
    <span class="<?print $emailclass; ?>">
        Email address:</span>
    <input name="email" type="text"
        class="<? print $emailclass; ?>"><br>

    <span class="basictext">Your name:</span>
    <input name="name" type="text" class="basictext"
        value="<?print $username; ?>"><br>
    <input type="hidden" name="process" value="1">
    <input type="submit" name="Button1" value="Sign up!">
</form>
</body></html>

Código exemplo Python

   1 <!-- From "User-Friendly Form Validation with PHP and CSS" at
   2      http://www.onlamp.com/pub/a/php/2004/04/22/php_css_forms.html -->
   3 <!-- This is a re-implementation using Python and PSE for comparison. -->
   4 <?
   5 import re, urllib
   6 
   7 message    = ""
   8 emailclass = "basictext"
   9 username   = ""
  10 
  11 if pse.form.has_key('process'):
  12     pattern = r'.*@.*\..*'
  13     email   = pse.form['email']
  14     urlname = urllib.quote(pse.form['name'])
  15 
  16     if re.match(pattern, email):
  17         # Here's where you would store
  18         # the data in a database...
  19         pse.plugins.response.redirect('thankyou.pt?&username=%s' % urlname)
  20 
  21     message    = "Please enter a valid email address."
  22     username   = pse.form['name']
  23     emailclass = "errortext"
  24 ?>
  25 
  26 <html>
  27 <style>
  28     .basictext {
  29         font-family: Arial, Helvetica, sans-serif;
  30         font-size: 14px; color:#000066;
  31     }
  32     .errortext {
  33         font-family: Arial, Helvetica, sans-serif;
  34         font-size: 14px; color:#C00000; font-weight: bold;
  35     }
  36 </style>
  37 <body>
  38 <form action="email.pt" method="post">
  39     <? if message != "":
  40            print '<span class="errortext">%s<span><br>' % message
  41     ?>
  42     <span class="=emailclass">
  43         Email address:</span>
  44     <input name="email" type="text"
  45         class="=emailclass"><br>
  46 
  47     <span class="basictext">Your name:</span>
  48     <input name="name" type="text" class="basictext"
  49         value="=username"><br>
  50     <input type="hidden" name="process" value="1">
  51     <input type="submit" name="Button1" value="Sign up!">
  52 </form>
  53 </body></html>

Prós

Contras

Mais Informações

http://nick.borko.org/pse.

( Análise do PSE: contribuição de RômuloCampelo )

Zope

Da WikiPedia:

Zope é um servidor de aplicações web Open Source escrito na linguagem Python. Zope significa "Z Object Publishing Environment" (Ambiente de Publicação de Objetos). Muitas tarefas de administração de um servidor Zope podem ser realizadas através de uma interface web. Os objetos que o Zope publica na Web são escritos em linguagem Python, e tipicamente armazenados num banco de dados orientado a objetos, o ZODB, que é integrado ao sistema. Objetos básicos, tais como documentos, imagens e templates (modelos de páginas) podem ser criados ou modificados via web. Objetos especializados, tais como wikis, blogs, e galerias de fotos estão disponíveis como componentes adicionais (chamados products), e existe uma comunidade pujante de pequenas empresas criando aplicações web como produtos. Existem duas gerações de Zope em uso atualmente (21/out/2005): Zope 2.8.3 é a versão estável mais recente da segunda geração, e Zope 3.1.0 é o lançamento mais novo da terceira geração.

Plone

Conheça também o Plone, um famoso e poderoso CMS (Sistema de Gerenciamento de Conteúdo) que roda sobre o Zope. Com o Plone é possível gerenciar conteúdos de forma amigável e ainda desfrutar de todo um framework para a criação de aplicativos, que interagem de forma totalmente integrada com o Zope e o Plone. Esse framework se chama Archetypes. Maiores detalhes em http://www.plone.org/documentation/archetypes.

SkunkWeb

O SkunkWeb é um servidor de aplicações web feito com um grande foco em robustez e (uma boa) tolerância a faltas. Cada requisição é tratada em processos diferentes (ao contrário da Medusa e muito semelhante ao Apache) para garantir que qualquer erro em um módulo implementado em C não vá quebrar a máquina virtual do Python e indisponibilizar o serviço como um todo.

Também, ele possui um sistema de templating próprio descrito aqui.

Prós

Contras

Mais informações

No site do SkunkWEB, aparentemente o site mais cheiroso da web. :-)

Crusader

Funciona no estilo Python Server Pages. Mais informações no site do Crusader.

Albatross

Apenas algum exemplo de código ...

Exemplos de código

cgi-bin/simple.html

<html>
<head>
<title>My CGI application</title>
</head>
<body>
Hello from my second simple CGI application!
</body>
</html> 

cgi-bin/simple.py

   1 #!/usr/bin/python
   2 
   3 from albatross import SimpleContext
   4 
   5 ctx = SimpleContext('.')
   6 templ = ctx.load_template('simple.html')
   7 templ.to_html(ctx)
   8 print 'Content-Type: text/html'
   9 print
  10 ctx.flush_content() 

Mais informações

Albatross.

O que usar?

Na minha reles opinião:

Complementando esta comparação de frameworks, existem diversos outros recursos disponíveis na Web, entre eles:

Outras informações

Existem diversas outras ferramentas para auxiliar no desenvolvimento de aplicações avançadas para web, tais como:

Existem muitos artigos e tutoriais de assuntos específicos citados aqui, portanto, aqui vão alguns:

Considerações finais

Este artigo foi apenas o meu ponto de vista sobre este assunto. Se alguém tiver alguma dúvida, favor entrar em contato pelo rkuesters (arroba) gmail (ponto) com. Por favor, qualquer erro técnico, falta de informações, etc e tal; modifiquem! :-) Obrigado!

Atenciosamente, Richard Kuesters.

Notas sobre o mod Python adicionadas por: João S. O. Bueno Calligaris

Correções do Webware por: Michel Thadeu

Complementos para Spyce, CherryPy e SkunkWeb por: Bogdano Arendartchuk

Notificação de erros no Webware por RudaMoura

PythonParaWeb (editada pela última vez em 2013-12-18 15:06:38 por erichideki)