Python II

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 uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *