Olá pessoal…
Vamos falar hoje um pouco sobre Python, Apache, CGI e frameworks Python?!
CGI x MOD_PYTHON x MOD_WSGI
Programadores PHP (estou incluso nesta lista) podem “estranhar” a forma como o Apache trata requisições Python, pois praticamente todo servidor de hospedagem web já vem configurado com o mod_php por padrão. Isto significa que basta jogar os arquivos em uma pasta pública e deixar que o Apache faça todo o resto.
De certa forma, isso ocorre também quando o servidor Apache está devidamente configurado com o mod_python, mas não é um caso tão comum. Pode-se também usar “aquela maneira tradicional” de executar CGI adicionando no cabeçalho do script (no caso do Python #!/usr/bin/python) o endereço do interpretador da linguagem em questão.
A forma que venho utilizando é do FastCGI com mod_wsgi. Este módulo tem por principal objetivo hospedar qualquer aplicação (Python) que suporte a interface WSGI, o que facilita muito o deploy de aplicações construídas em frameworks como Django, Pylons, Turbogears, etc.
O WSGI (Web Server Gateway Interface) é uma especificação de comunicação entre aplicações e servidores web, um padrão que garante que uma aplicação Pylons (por exemplo) execute em qualquer servidor web (que obviamente suporte o padrão)… no caso do deploy de uma aplicação Django, os arquivos .py não ficam diretamente acessíveis no public_html do Apache. Deve-se escrever um .htaccess que faça a requisição passar pelo WSGI, acionando a interface WSGI da framework e obtendo uma resposta.
Isso também facilita para que as frameworks tenham maior controle sobre as url’s. Em Django você é obrigado a escrevê-las e apontá-las para as suas determinadas views.
Levei um tempo para me acostumar e entender essa forma de publicar meus projetos, mas garanto que você se sente realmente no controle da sua hospedagem e das requisições/respostas.
Segue alguns links interessantes sobre o assunto de deploy (embora a maioria dos links sejam sobre Django, entende-se bem o conceito do deploy mesmo para outras frameworks):
- WSGI – A resposta para a questão definitiva sobre Python, a web e tudo mais: http://humberto.digi.com.br/blog/2008/04/23/python-wsgi-fisl9/
- Usando Django com mod_python: http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#howto-deployment-modpython
- Usando Django com FastCGI: http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/#howto-deployment-fastcgi
- Hospedando Django com FastCGI (na TeHospedo): http://wiki.tehospedo.com.br/w/Django
- Django no Passenger: http://www.andrewsmedina.com/2008/07/18/django-no-passenger/
- Deploy Pylons em FastCGI: http://devlog.waltercruz.com/deploy-simplificado-pylons-fastcgi
PRINCIPAIS FRAMEWORKS WEB
Programar puramente Python para a web não é lá muito bonito. Mas com o auxílio de uma framework (que em Python cria um “foco” de escrita para determinado ambiente) esta tarefa pode tornar-se muito divertida, rápida e eficiente. Abaixo segue uma pequena lista das principais frameworks Python para web que eu conheço:
- Django (http://www.djangobrasil.com.br)
O Django foi a framework que “fisgou meu coração”. Utiliza o padrão MVC, excelente para desenvolvimento rápido, limpo e fácil… muito fácil. Possui mapeamento objeto-relacional (ORM), interface administrativa automática, url’s elegantes, sistema de templates (usado pelo Google App Engine), internacionalização, formulários (escreva seus forms em Python), um servidor integrado para o ambiente de produção, middlewares para tratamento de requisições e respostas e um templage_tag para replicação de “Lorem Ipsum” que é uma maravilha. Sua documentação é muito boa e sua comunidade muito apaixonada.
- Turbogears (http://oturbogears.org)
Não tive muito contato com o Turbogears, mas com certeza é uma framework muito cultuada pelos Pythonicos. Também utiliza ORM, um servidor web embutido (CherryPy), usa o sistema de apresentação Cheetah e utiliza por padrão a framework javascript Mochkit para a camada de interação (JSON). Vem ganhando muito respeito por tratar-se de uma “megaframework” feita de tecnologias já existentes… só não me aprofundei mais nela por achar o Django um pouco mais fácil de se aprender…
- Spyce (http://spyce.sourceforge.net/)![]()
Essa aqui eu conhecí bem depois de começar com Django. Ela ganha destaque por utilizar o conceito de PSP (Python Server Pages) do mod_python, programadores PHP gostarão desta idéia pois trata-se do Python em tags, como no PHP (<? ?>). Também possui um servidor embutido e aparentemente está em rápida expansão.
- Pylons (http://pylonshq.com/)![]()
Pylons é a próxima framework Python para a web que eu pretendo estudar. Trabalha com ORM e com vários sistemas de templates (Mako, Genshi, ou qualquer outro) além de ter o FormAlchemy, um prato cheio para construção de formulários. Até onde sei é a framework que melhor suporta WSGI e é totalmente “desmontável”, permitindo a customização da estrutura de pacotes para determinados projetos. Ah! O site oficial do projeto é muito bonito e sua documentação bastante acessível…
- CherryPy (http://www.cherrypy.org/)
Talvez a framework mais “Pythonica”, trata-se de uma framework que age diretamente sobre o protocolo HTTP. Isto resulta em códigos objetivos… sinceramente, fiquei bem interessado depois de conhecer a forma de escrita do CherryPy (e passei até a entender melhor essa história de cliente, servidor, gateway interface, etc.). Alguns podem até ficar meio confusos… vai depender do ponto de vista.
- Zope (http://www.tchezope.org/)
Você vai ouvir muito falar do Zope ainda… principalmente da sua aplicação de maior sucesso, o Plone. Explicando: o Plone é um CMS escrito em Zope… o mais completo CMS que já usei até hoje (e talvez até mesmo o mais complexo)… já o Zope, em miúdos é um servidor web, servidor de aplicações, banco de dados orientado a objetos, sistema de publicação de objetos e também possui uma impressionante framework e um dos mais práticos sistemas de templates (ZPT – Zope Page Templates). É uma tecnologia fenomenal, você vai se sentir totalmente submerso em um novo mundo que o Zope cria diante dos seus olhos (quase entrei em parafuso a primeira vez que lidei com ele).
Para se ter uma idéia, você o administra e desenvolve para/com ele utilizando apenas a sua interface web (pode-se utilizar outros recursos como FTP, Webdav, etc.).
Enfim… apresentei para vocês um pouquinho mais de Python em conjunto com o ambiente web. A partir deste post eu dou por encerrada a minha fase “conceitual” aqui no Profissionais TI. Por utilizar ferramentas que não são padrões de mercado na região onde atuo, me sentí na obrigação de fazer todas estas introduções… aguardem por posts mais práticos.
E você?! Tem alguma framework que usa que não foi comentada? Alguma sugestão ou correção para este artigo? Não deixe de comentar…
Até a próxima…




9:42 em 16 de fevereiro de 2009
Programando Python para a Web | Profissionais TI…
Vamos falar hoje um pouco sobre Python, Apache, CGI e frameworks Python?!…
15:12 em 16 de fevereiro de 2009
Bom texto!
Hoje em dia é mais fácil fazer o deploy com o mod_wsgi, que inclusive já está incluido no lenny..
Abraços!
15:16 em 16 de fevereiro de 2009
Legal… o Lenny promete!
Gosto quando há a liberdade de escolher qual framework (e versão) você irá utilizar em uma hospedagem sem necessitar intervenção dos técnicos. O MOD_WSGI com certeza facilita muito!
Obrigado pelo comentário…
14:54 em 23 de fevereiro de 2009
[...] Django é uma framework web que está para o Python assim como o Ruby on Rails está para o Ruby. Rápida, prática, eficiente: [...]
10:10 em 31 de março de 2009
[...] de darmos umas pinceladas nos assuntos Python para a Web (onde falamos sobre CGI, mod_wsgi, frameworks web, etc) e instalação do Django (onde foram [...]
19:58 em 27 de abril de 2009
por favor gostaria que alguem me ajudasse a configurar o modulo python!!!
ja to a 2 dias tentando e nao consigo!!!!!
20:19 em 30 de abril de 2009
@Jonnathan:
Desculpe a demora da resposta… estou com problemas com a internet por aqui.
Bom, você tem que ser um pouco mais específico cara… que servidor você tá usando? Qual é o problema que está apresentando?
Dá uma visitada no grupo de discussão do Django (http://groups.google.com.br/group/django-brasil?pli=1). Acho que o Google responde também (http://www.google.com.br/search?q=configurando+mod_python&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a).
9:57 em 29 de maio de 2009
[...] de Desktop (com Qt, GTK, TK, etc), Web, cálculos científicos, fins educacionais, etc. Podemos também desenvolver jogos com o Python. E [...]
9:19 em 15 de junho de 2009
[...] caso da Web, as frameworks preparam o Python para um desenvolvimento ágil, rápido e rico. Muita coisa, como [...]
10:05 em 21 de agosto de 2010
[...] e Aqui tem mais informações sobre os frameworks e sobre o CherryPy [...]