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.
Conteúdo
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
- Mapeamento objeto-relacional - é possível definir seus modelos de dados com classes em Python e gerar automaticamente o SQL correspondente e executa-lo no banco de dados a ser utilizado. Mas, se por preciso é possível escrever os comandos SQL também.
- Interface de administração automática - o django trás automaticamente uma interface de administração automática onde é possível atualizar o conteúdo do seu sistema.
- Urls elegantes - é possível projetar URLs sem nenhuma limitação estrutural.
- Sistema de templates - o django contém um sistema de templates que separa o html do codigo em Python.
- Internacionalização - esse framework tem suporte a aplicações multi-linguagem.
NewForms - é possível gerar e manipular formulários facilmente através dos modelos de dados definidos.
- Unicode - suporta o unicode, de forma simples
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
Fontes de estudo
Fontes de estudo link
web2py
=== 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
- Não se repita ( DRY )
- Deve existir apenas uma maneira óbvia de para fazer algo
- Explícito é melhor do que implícito
- O web2py procura seguir rigorosamente os dois primeiros princípios por forçar o desenvolvedor a utilizar boas práticas de engenharia de software, utilizando um bom padrão de projeto (MVC) e incentivando o reaproveitamento de código. O framework guia o desenvolvedor facilitando as tarefas mais comuns em desenvolvimento para web.
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:
Mochikit - Biblioteca JavaScript
- Kid - Apresentação (templates)
CherryPy - Servidor WEB
- SQLObject - Mapeamento objeto-relacional para bancos de dados
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:
- Routes - Roteamento de urls
- Beaker - Middleware de sessões
- Mako - Templates
- Webhelpers - Biblioteca auxiliar, com algumas funções portadas do Ruby on Rails.
Paste, PasteDeploy e PasteScript - Componentes do Paste
- Formencode - validação de formulários
- Decorator
- Nose - Framework de testes
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.
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
- Aparentemente existe uma DLL para integração com o IIS.
Código exemplo
Um simples código hello world servlet:
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:
Prós
- Curva de aprendizado baixa;
- Boa integração com módulos existentes;
- Maduro, versão atual é 0.8.1.
Contras
- Pode ser complicado para quem não tem experiência;
- Aparentemente só.
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
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
- Excelente documentação!
- Muito pequeno, porém poderoso e estável;
- Possuí um webserver embutido, o que pode vir a calhar, dependendo da necessidade (para mim foi ótimo!);
- Nativamente separa código e layout HTML;
- Possuí diversos opcionais de configuração para desempenho(pool, thread, thread pool, etc) e integração com o Apache (CGI, Fast CGI, mod_rewrite, mod_proxy);
- Todo o código é compilado, isto é, há um ganho de desempenho na execução (utilizando-se Psyco o ganho pode ser muito superior; mas ainda há algumas dúvidas quanto ao uso, uma vez que usuários notaram alguns picos no uso de memória em suas aplicações que, sem o Psyco, não acontecem);
- Boa segurança;
- Muito mais próximo ao Python que o Zope, por exemplo, o que dá ao programador a liberdade de efetivamente usar ao máximo os recursos da linguagem.
Ferramentas como o Subway e o Paste utilizam o CherryPy. Até mesmo outros frameworks, como o TurboGears, usam ele.
Contras
- A cada versão nova, os nomes das funções e a estrutura do módulo mudam, assim como as opções de configuração. Se você cria uma aplicação para a versão 2.2, é um parto fazer rodar na 3.0...
- De acordo com o autor, ainda não foi testado em servidores com alta demanda de informações, portanto não se tem idéia de seu comportamento em stress extremo;
A linguagem de template do CherryPy (CherryTemplate) pode chegar a ser um pouco confusa, ao olhar de um web designer sem experiência em programação, MAS é importante lembrar que o uso dela é totalmente opcional, ainda bem .
- Até a versão 2.0, toda vez que mudar o código, deverá seguir a procissão: killar o processo do servidor (do cherrypy), recompilar o código e executar ... um verdadeiro pé no meio. Da versão 2.1 em diante, após toda mudança no código, ele recarregará automaticamente o servidor para você. Mas veja bem; para isto, você deve definir no arquivo de configuração o seguinte: server.environment = 'development'. Quando a aplicação ficar estável e pronta, mude para 'production'.
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:
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
- Veja só, ainda não encontrei nenhum.
Contras
- Aos olhos de muitos usuários em listas de discussão, o Quixote tem uma curva de aprendizado muito alta, realmente difícil mesmo para programadores eficientes (tente imaginar web designers sem experiência com programação);
- Encontrados problemas ao rodar em Windozes e etc;
Mais Informações
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:
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
Prós
- É a melhor framework web para trabalhos em equipe;
- Dentre todos os citados, este é o paraíso para webdesigners;
- Depende do Twisted para funcionar (do lado bom, é uma ferramenta poderosíssima para trabalhar com networking, portanto, já está lá!);
- Já falei antes? Aqui vai denovo: curva de aprendizado quase nula!;
Contras
- Documentação? Acho que o Divmod esqueceu disto ... pelo menos tem lista de discussão;
- Depende do Twisted para funcionar (do lado ruim, depender de algo é este lado!);
- Aparenta ainda ser um pouco instável, o caso é testar.
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
- Curva de aprendizado baixa;
- taglibs, este vale por 100;
Active Handlers e SpyLambdas;
- pode ser utilizado com mod_python e FastCGI.
- possui um servidor HTTP próprio que pode ser utilizado por trás do Apache;
- suporte a pooling e sessões;
- está em desenvolvimento constante e acelerado;
Oh, há documentação!
Contras
- não possui recursos que garantem a segurança das páginas, como "sandboxing" dos códigos.
- ele é orientado a página, não existe uma maneira utilizar-se um "controller" sem acabar retornando para a mesma página (como em ASP.NET).
- existem problemas de gerenciamento de sessões e variáveis no pool quando utiliza-se o Spyce junto com o mod_python ou o FastCGI, isso pode ser contornado utilizando seu servidor embutido + mod_proxy (e com bons resultados).
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
- Permite acesso de baixo nível ao protocolo HTTP e a toda a API do servidor Apache.
- Tem uma flexibilidade maior para desenvolvimento de aplicações que requeiram grande interação com a Web.
- Otimizado para ser rápido e eficiente.
Contras
- Razoavelmente complexo para aprender.
- A segurança fica completamente por conta de cada programa feito.
- Não há nada "pronto" - não tem modelos de site prontos pra funcionar bastando preencher as lacunas, ou coisa parecida. Ou se parte de uma aplicação já escrita usando Mod Python, ou se parte do zero.
Mais Informações
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
- A execução de byte codes Python compilados aumenta muito o desempenho das aplicações, além de prover segurança ao desenvolvedor por ocultar os fontes em Python;
- Simples e poderoso: alia a facilidade inerente ao Python à potência do mod_python;
- Separa a Apresentação/Interface(HTML) e a Lógica (Python), coerente com o modelo MVC, permitindo também que o programador codifique no estilo tradicional do PHP, se desejar;
- API rica para o desenvimento de aplicações Web;
- Permite a criação de Tags customizadas, extendendo as funcionalidades dos templates (usuários avançados);
- Permite a extensão de funcionalidades pela criação de plugins em Python (usuários avançados);
- Permite a criação de módulos que manipulam pedidos de autorização e autenticação do browser;
- Relatórios de erros customizáveis e amigáveis;
- Usuários de PHP podem fazer a transição para Python de forma muito mais rápida e fácil do que usando o mod_python e outras ferramentas de template;
- O colaborador que contribuiu com a análise deste framework testou sumariamente todas as ferramentas citadas neste artigo e, em sua humilde opinião, considerou este o que mais se harmoniza com a filosofia de desenvolvimento do Python, aliando simplicidade, potência, código conciso e claro, bem como por permitir rápida produtividade em curto prazo. Parece que o Zope é mais poderoso, mas também muito mais complexo.
Contras
- Menos difundido que outras ferramentas e portanto pode ter sido menos submetido a testes.
Mais Informações
( 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.
Links
ZopeKitDeConstruçãoDeAplicaçõesWeb, aqui mesmo no Python Brasil;
ZopeWebApplicattionDevelopmentAndContentManagement também aqui no Python Brasil;
http://www.fabiorizzo.com/artigos, contém alguns artigos sobre Instalação e criação de páginas no Zope
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
- Aparenta ser poderoso. Muitos opcionais ... é questão de estudar mais um pouco.
- Possui um sistema gerenciamento de conexões com DBs e sessões.
Contras
Não possui uma boa integração com o Cheetah.
- A documentação é pobre, principalmente de exemplos.
- Só funciona no Windoze da vida com cygwin.
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
Mais informações
O que usar?
Na minha reles opinião:
- Fácil: Webware ou Spyce;
- Poderoso, com estrutura para trabalhos em equipe: Nevow;
- Super-power: Cherrypy (ver contras!).
Links para outras comparações
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:
Orange: excelente ferramenta de data mining com ótima documentação;
Alguns projetos do Divmod são ótimos, é questão de dar uma olhada;
Jython! Para aqueles que amam Python, mas não abrem mão do Tomcat
Alguns Links Interessantes
Existem muitos artigos e tutoriais de assuntos específicos citados aqui, portanto, aqui vão alguns:
HospedagemPython, para uma lista de hospedeiros web que suportam Python
WebwareRapidinho, um tutorial sobre o webware;
IntroducaoJython, IntroducaoJythonDidatica e Jython, todos com algumas informações sobre o Jython;
- Os citados sobre Zope;
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