Entretanto, depois de ler o manual com a sintaxe de base, pesquisei para ver como escrever programas em Python para a Web. E fiquei desiludido. O Python é como o Perl e o Java, etc. O HTML é gerado em código, é sempre processado. Isso fica mais pesado para o servidor.
No site do Python, apresentam várias soluções para integrar o Python no Apache: CGI, mod_python, FastCGI, SCGI, mod_wsgi e WSGI. Este último parece ser a solução mais leve e funcional, mas com tanta literatura e referências a frameworks, decidi testar a versão mais simples: o CGI.
Ainda sobre o HowTo do Python acerca de Web Servers: o documento perde-se com considerações sobre persistência de dados, caching, programas que não correm como era esperado, falta de escalabilidade, frameworks para poder gerir projetos em MVC, etc. Coisas que o PHP já resolveu há mais de 15 anos. Aliás, nunca vi referências a esses problemas na documentação do PHP. Fiquei desiludido.
Mas quis testar o Python no Apache e configurei este último, numa máquina de testes, para correr o Python como CGI.
No ficheiro httpd.conf, descomentei a linha que inibe o uso do CGI
LoadModule cgi_module lib64/httpd/modules/mod_cgi.so
e acrescentei as linhas seguintes na configuração da diretoria do CGI
<Directory "/srv/httpd/cgi-bin">
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
Depois, criei os dois programas seguintes, na diretoria /srv/httpd/cgi-bin aos quais foi necessário dar permissões de execução:
chmod 755 /srv/httpd/cgi-bin/fatorial.py chmod 755 /srv/httpd/cgi-bin/form.py
/srv/httpd/cgi-bin/fatorial.py
#!/usr/bin/python import cgi import cgitb; cgitb.enable() # for troubleshooting print "Content-type: text/html" print print """ <html> <head><title>Fatorial em Python</title></head> <body> <h3> Fatorial em Python </h3> """ def mul(x,y): return x*y def fat(w): return reduce(mul, range(1,w+1)) def prt(x): print fat(x) map(prt, range(2,11)) print """ </body> </html> """
/srv/httpd/cgi-bin/form.py
#!/usr/bin/python
import cgi
import cgitb; cgitb.enable() # for troubleshooting
print "Content-type: text/html"
print
print """
<html>
<head><title>Sample CGI Script</title></head>
<body>
<h3> Sample CGI Script </h3>
"""
form = cgi.FieldStorage()
message = form.getvalue("message", "(no message)")
print """
<p>Previous message: %s</p>
<p>form
<form method="post" action="form.py">
<p>message: <input type="text" name="message"/></p>
</form>
</body>
</html>
""" % cgi.escape(message)
O primeiro programa calcula os fatoriais dos números 2 até 10, enquanto o segundo tem um formulário que submete um campo de texto para o próprio ficheiro.
Deixe um comentário