Jump to content

Archived

This topic is now archived and is closed to further replies.

ScornInPC

Programando em Python para WEB

Recommended Posts

Ola galera http://forum.imasters.com.br/public/style_emoticons/default/natal_noel.gif (gostei deste emotion)

 

To aqui pra falar de Python novamente, e desta vez, to afim de fazer um guia definitivo de programação python para web. Nestes tutoriais, vou falar sobre como usar Python como CGI. Bem minha experiencia com frameworks e mod_python não foraum muito agradaveis. Logo estou postando como trabalhar com CGI, pra aqueles que querem começar do 0 e não pular para o proximo passo. Bem talvez num futuro eu começe a falar sobre frameworks mas, to gostando do modo CGI, ja que seguea risca o formato python, sem aqueles comandos, e estruturas de diretórios, e mudanças em arquivos de configurações, e sem contar que a maioria dos servidores possuem suporte á CGI. Bem, é isso, vou começar uma série de tutoriais do basico ao avançado, no CGI aos frameswork (talvez, pq não) e quem sabe juntar tudo depois e publicar online, sei lá.

 

P: "Ta de brincadeira né?" http://forum.imasters.com.br/public/style_emoticons/default/natal_dry.gif

R: "Não" http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif

 

ps: esses emotions estão de mais.

chega de bobeira ^^ (é que aqui eu me sinto em casa)

 

- Instalação

Bem primeiro vamos ao nosso ambiente de trabalho ok?

Como estou de windows, vou descrever todo o processo para windows, mas pra quem usa linux, sabe onde mudar certas coisas.

Bem, precisamos do Apache[1] e o Python[2] instalado.

Bem, não vou explicar como se instala os dois, por que pra instalar é só ir dando "Next" ou "Proximo" http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif

 

Bem, após instalados, procuremos o arquivo httpd.conf que fica dentro do diretório conf do apache.

abrimos ele com o bloco de notas mesmo, e localizamos o parametro "ScriptAlias". Nele voce configura qual o diretório ficará os arquivos CGIs do lado cliente. Logo a baixo você encontra onde ficará os arquivos do lado servidor, algo assim:

 

<Directory "D:/www/cgi-bin">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

Como perceberam, meus arquivo de CGI ficam em D:/www/cgi-bin e podem ser acessados atravez de http://localhost/cgi-bin/

Mudem a vontade, e restartem, reinicializem ou matem o processo e suba novamente seu apache.

Pronto, instalação completa, vamo programar http://forum.imasters.com.br/public/style_emoticons/default/natal_laugh.gif

- Começando a Programar

Vá até o diretório que foi configurado para seus scripts CGI e crie um arquivo chamado tuto_1.py.

 

Vale comentar que o .py é um costume meu, mas aqui pode ser qualquer extensão, sendo html, htm, txt ou até sem extensão, mas como o script é em Puthon, eu utilizo .py.

Nos nossos scripts python, precisamos de 4 coisas:

1 - Local do interpretador

2 - Codificação

3 - Cabeçalhos

4 - Quebra de linha

 

Um script inicial ficaria assim

#!C:\\Python25\\python.exe
#-*- coding: ISO-8859-1 -*-
   
print "Content-type: text/html; ISO-8859-1"
print
   
print '''
	 <html>
		 <head>
			 <title> Programando em Python para WEB :: Tutorial 1</title>
		 <head>
		 <body>
			 Olá
		 </body>
	 <html>
 '''

Na primeira linha, temos o caminho do nosso interpretador, o local onde instalamos nosso python.

Na segunda linha, dizemos que nosso arquivo será ISO-8859-1, se não foi utilizado codificação, o script gerará erro ao encontrar acentos no código, outras codificações como UTF-8 tambem podem ser usadas.

Na terceira linha de código, temos nossos cabeçalhos, tudo que for posto aqui, será cabeçalho. No exemplo, estou enviando, que o script será text/html e codifcado em ISO-8859-1.

Na quarta linha, um print. Isso, só um print, porem esse print serve para diferenciar os headers do body, ou seja, tudo que for antes deste print, será cabeçalhos HTTP, e tudo que tiver depois, será HMTL e derivados.

Na quinta linha do código, nosso html.

 

Bem, esso foi o primeiro e o segundo tutorial desta tópico. Bem, não sou velho, mas ja ta tarde para mim, então, amanha eu posto mais coisa ok?

 

ps: desculpem a quantidade de emotions, mas é que eles são muito massa http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif

 

[]'s

Share this post


Link to post
Share on other sites

- Trabalhando com templates (Parte I)

Bem, depois de você ver esse tutorial até aqui, deve estar se perguntando um monte de coisa certo?

Acho que a primeira seria:

 

P: "Tudo eu vou ter que dar um print? sempre usar o print?"

R: "Sim, mas existem tecnicas para isso"

 

Bem, um template simples pode ser feito como se faz mascaras pro print. As mascaras funcionam mais ou menos assim

 

>>> mascara = '%02d/%02d/%02d'
 >>> dia = 12
 >>> mes = 02
 >>> ano = 2004
 >>> print marcara % (dia, mes, ano)
 12/02/2007

bem, aplicando isso ao nosso tutorial podemos fazer alguma coisa assim

 

html =	 '''<html>  
		 <head>  
			 <title>%s</title>  
		 <head>  
		 <body>  
			 <table border="0" width="100%%" cellpadding="0" cellspacing="0">
				 <tr>
					 <td height="500" valign="top">
						 <!-- conteudo -->
						 %s
					 </td>
				 </tr>
				 <tr>
					 <td align="center">
						 <!-- rodape -->
						 %s
					 </td>
				 </tr>
			 </table>  
		 </body>  
	 <html>'''

No código acima estamos criando o template com o titulo e nosso conteudo dinamico.

Assim nosso script completo ficaria assim:

 

#!/usr/bin/python
 #-*- coding: ISO-8859-1 -*-  
 
 print "Content-type: text/html; ISO-8859-1"  
 print  
 
 html =	 '''<html>  
		 <head>  
			 <title>%s</title>  
		 <head>  
		 <body>  
			 <table border="0" width="100%%" cellpadding="0" cellspacing="0">
				 <tr>
					 <td height="500" valign="top">
						 <!-- conteudo -->
						 %s
					 </td>
				 </tr>
				 <tr>
					 <td align="center">
						 <!-- rodape -->
						 Programando em Python para WEB
 Passo à Passo Completo by ScornInPC
					 </td>
				 </tr>
			 </table>  
		 </body>  
	 <html>'''
 
 titulo = "Programando em Python para WEB :: Tutorial 2"
 conteudo = "Olá"
  
 print html % (titulo, conteudo)

Lembrando que esta é a primeira parte do tutorial de templates, e que esta não convem quando temos templates extremamente complexos.

Esta tecnica é boa para pequenos projetos, ou projetos onde não precisamos de design, como ferramentas de administração ou soluções internas.

Share this post


Link to post
Share on other sites

O Tutorial está otimo e parece que vai ficar bem melhor, mas o que é esse (''' ''') são 3 aspas simples?

 

e você poderia comentar um pouco essas coisas diferentes.

 

bem pelo menos diferentes pra mim que sou iniciante em Python http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

Share this post


Link to post
Share on other sites

E ae RickinPC,

 

entaum, algumas pessoas estão me perguntando, mas não estão postando aqui, porem ai vai

 

1° - Preciso identar o código HTML?

não, isso é um costume de programador =)

 

2° - O que é isso '''? são 3 aspas simples?

Sim, isso são 3 aspas simples, serve para criar strings com quebra de linha, se eu fosse criar uma string assim de linha simples, poderia ser assim

 

html = "<title>%s</title>"

e não

 

html = "
<title>
	%s
</title>"

para isso deveria ser

 

html = '''
<title>
	%s
</title>'''

 

3 aspas simples

 

=)

 

qualquer duvida, só postar

Share this post


Link to post
Share on other sites

Agora que fui ver seu Nick AUEhUAEhUAHe =)

Share this post


Link to post
Share on other sites

Esse nick é em homenagem a você

porque eu te adimiro muito no mundo da programação... EU SOU SEU FÃM...

hhehehee

brincadeiras a parte Obrigado por responder isso é justamente a minha dulvida mas me espressei mal na pergunta e não falei da identação.

valew!!!

Share this post


Link to post
Share on other sites

poxa, quase 100 visualizações em 3 dias e só o rick comentou?

 

"/

Share this post


Link to post
Share on other sites

Boa velho... tambem estou me preparando para aprender python, e nos ultimas 2 semanas estava procurando materias para estudos e plataforma de desnvolvimento etc (zope e companhia), porem axeu muito xato usar uma linguagem e depender de "outras" tecnologias para desenvolver.

 

 

Espero que nao deixe a peteca caiar, estaremos ai sempre para aprender.

 

Gracias

Share this post


Link to post
Share on other sites

aeeeeeeee =)

entaum mx, essa idéia de começar do zero foi justamente isso que você falo, "usar uma linguagem e depender de "outras" tecnologias" é tenso, e assim to tentando achar partes à partes, para poder chegar a tais tecnologias sem um efeito drastico, por exemplo, na proxima parte, to preparando alguma coisa com o cheetah, que é um modulo de templates, muito legal, e a base de muitos outros frameswork.

 

Bem, a idéia é ajudar e me ajudar a criar um roteiro de facil aprendizagem, ja que existem Ns frameswork, que funcionam de Ms maneiras com outros Ns frameswork.

 

pois bem, aguardem pois to tentando montar uma 2° parte sobre template, que fará deixará mais facil ainda de criar templates.

 

Aconselho que quizer realmente curtir o post, assina-lo, para receber em seu email quando tiver atalização.

 

[]'s

Share this post


Link to post
Share on other sites

- Trabalhando com templates (Parte II)

 

Iremos nesta parte de template, levantar uma das maiores dificuldades encontradas neste modo de programação para WEB, e como contorna-la.

Indo direto ao ponto, tudo que estiver no diretório cgi-bin, será "executado", ou seja, se não for algo executavel, irá gerar um erro. Coisas não executaveis, são images, folhas de estilo, arquivos para download.

Para trabalharmos em templates mais complicados, precisamos ter um diretório no nosso diretório raiz do servidor (apache). Por exemplo, nosso diretório raiz é o c:/www, e o nosso cgi é c:/www/cgi-bin, então precisamos usar os dois diretórios para criarmos nosso site, o c:/www para arquivos não executaveis, e o c:/www/cgi-bin para os executaveis.

 

Bem, com isso em mente podemos começar nosso tutorial http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

Para nosso tutorial precisamos de criar 2 diretórios, um em C:/www/tuto_3 e outro em C:/www/cgi-bin/tuto_3. Como dito, no C:/www/tuto_3 ficará as imagens, folhas de estilos e arquivos para download, no C:/www/cgi-bin/tuto_3 ficará os arquivos executaveis.

os arquivos basicos usados no nosso tutorial pode ser baixado em http://www.sendspace.com/file/zhdvo0

 

ps: Quem tiver problemas em baixar o arquivo, pode entrar em contato cmg, pelo post ou por MP, por favor

 

No arquivo, possui as imagens e os templates, arrumando tudo, meu diretório apache ficou assim:

C:/www/
	/tuto_3/
		/images/
			bar.jpg
			bar2.jpg
			button.jpg
			logo.jpg
			whiteblock2.gif


C:/www/cgi-bin/
	/tuto_3/
		index.py
		/templates/
			menu.html
			template.html

Os templates funcionam do mesmo jeito que foi explicado no tutorial anterior, porem, salvamos em arquivos separados, para podermos deixar nosso código mais limpo, e separar o código do layout.

Nosso arquivo principal é o index.py, é nele que iremos trabalhar, tendo os arquivos nos seus diretórios. Então, para não variar, precisamos do nosso padrão

#!/usr/bin/python
 #-*- coding: ISO-8859-1 -*-
 
 print "Content-type: text/html; ISO-8859-1"
 print

Agora precisamos carregar nosso template principal

fp = open('templates/template.html')
 html = fp.read()
 fp.close()

e o nosso menu

fp = open('templates/menu.html')
 MENU = fp.read()
 fp.close()

criamos uma variavel CONTEUDO (com um espaço em branco, falaremos mais dela depois) e mostramos o conteudo de tudo junto

CONTEUDO = '''
 '''
 
 print HTML % (MENU, CONTEUDO)

 

o código completo fica assim

#!/usr/bin/python
 #-*- coding: ISO-8859-1 -*-
 
 print "Content-type: text/html; ISO-8859-1"
 print
 
 fp = open('templates/template.html')
 HTML = fp.read()
 fp.close()
 
 fp = open('templates/menu.html')
 MENU = fp.read()
 fp.close()
 
 CONTEUDO = '''
	  
 '''
 
 print HTML % (MENU, CONTEUDO)

e produz o seguinte efeito

Imagem Postada

 

Talvez a coisa tenha ficado um pouco complicada, porem, se você pensar que está rodando o site de um local, e pegando as imagens de outro, fica mais facil.

Nos meus templates, as imagens estão assim

<img src="../../tuto_3/images/logo.jpg" height="45" width="747">

Porem você pode chama-las de varias outras maneiras

<img src="http://meusite.com.br/tuto_3/images/logo.jpg" height="45" width="747">

ou

<img src="c:/www/tuto_3/images/logo.jpg" height="45" width="747">

Talvez você usando o caminho WEB completo, seja mais flexivel.

 

A coisa ta ficando boa, certo? http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif

 

Já ta dando pra fazer uma coisa ou outra, bem legal. No proximo tutorial sobre templates, vou falar como separar os códigos HTML de Python de CSS e assim por diante de maneira facil.

 

Até a proxima

Share this post


Link to post
Share on other sites

- Trabalhando com templates (Parte III)

 

Com a 3° parte sobre templates, ficará mais claro como trabalhar semaradamente, um verdadeiro workflow, entre programadores e designers.

Com esta parte tambem, quem não conhecer muito de CSS, ou não tiver visto os arquivos do tutorial anterior, talvez fique um pouco perdido.

 

Os arquivos aquim são os mesmo do tutorial anterior, porem seguindo o padrão WEB, largando as tabelas e partindo para os DIVs http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif

 

Bem, resumidamente, temos o nosso template padrão

<html>  
	 <head>  
		 <title>Programando em Python para WEB :: by ScornInPC</title>
		 <link type="text/css" rel="stylesheet" href="<span class="postcolor">../../tuto_3</span>/style.css"> 
	 </head>  
	 <body>
		 <div id="site">
			 <div id="banner">
				  Programando em Python para WEB!
				 <div id="banner_img"></div>
			 </div>
			 <div id="divisao">
				 <div id="menu">%s</div>
				 <div id="conteudo">%s</div>
			 </div>
		 </div>  
	 </body>  
 </html>

Nosso template do menu

<ul>
	 <li><a href="">Inicio</a></li>
	 <li><a href="">Parte I</a></li>
	 <li><a href="">Parte II</a></li>
 </ul>
 <div id="menu_final"></div>

Nossa folha de estilo, que lembrando, deverá ficar no diretório fora do CGI-BIN, pois não é um arquivo executavel

body {
	 margin:0px;
	 color: #000000;
	 background-color: #FFFFFF;
	 text-align: center;
	 font-family: Calisto MT;
 }
 a {
	 color: #FFFFFF;
	 font-weight: bold;
	 font-size: 12px;
	 text-decoration: none;
 }
 a:hover {
	 text-decoration: underline;
 }
 
 #site {
	 width: 747px;
	 margin: 0 auto;
	 text-align: left;
 }
 
 #site #banner {
	 font-family: Calisto MT;
	 color: #004080;
	 font-size: 30px;
	 font-weight: bold;
 }
 
 #site #banner #banner_img {
	 height: 45px;
	 background-image: url(images/logo.jpg);
 }
 
 #site #menu {
	 width: 163px;
	 height: 300px;
	 background-image: url(images/bar2.jpg);
	 float: left;
 }
 #site #menu #menu_final {
	 width: 151px;
	 height: 113px;
	 background-image: url(images/bar.jpg);
 }
 
 #site #menu ul {
	 list-style: none;
	 padding: 0px;
	 margin: 0px;
 }
 
 #site #menu ul li {
	 background-image: url(images/button.jpg);
	 line-height: 29px;
	 font-size: 12px;
	 padding-left: 15px;
	 cursor: pointer;
 }
 
 #site #conteudo {
	 height: 250px;
 }

Reparem que as imagens agora, fica no diretorio normal, ja que a folha de estilo está um diretório acima da imagem. Se percebermos, o problema com a confusão dos caminhos acabam aqui http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

 

C:/www/
	/tuto_3/
		style.css		 <------ NOVO
		/images/
			bar.jpg
			bar2.jpg
			button.jpg
			logo.jpg
			whiteblock2.gif


  C:/www/cgi-bin/
	/tuto_3/
		index.py
	/templates/
		menu.html
		template.html

Esta parte não disse muito, mas se pararmos para analisar, veremos que os códigos estão completamente separados, não misturando HTML com Python com CSS com JavaScript e bla bla bla.

 

Essa é a maior vantagem que EU encontrei nesse modo de programar, com facilidade, já que não sou designer (só quebro o galho http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif )

Share this post


Link to post
Share on other sites

Cara.. talvez eu seja meio lento.. ou totalmente.. mas ainda nao descobri como fazer pra Rodar o python..

nao sei se interfere em algo, mas eu ja tinha instalado o apache para rodar com o php, entao a minha pagina de arquivos é em c:\Apache\htdocs (http://localhost/).. mas seguindo a sua configuração, no caso, a que já veio configurada no httpd.conf, a pasta de CGI é a C:\Apache\cgi-bin, e o python esta instalado em C:\bin\Python2.....

 

 

então.. o que eu faço? mudo alguma coisa, ou faço algo que ainda não fiz.. até que deu pra entender bem o seu tutorial, as coisas estao bem explicadas, mas só preciso rodar a bagaça.. hehehe

 

da uma força ai, valeu

 

abraço

Share this post


Link to post
Share on other sites

Ola Bernado, bem, o python ta funcionando?

 

se tiver ok, você vai ter que colocar seus script dentro da pasta C:\Apache\cgi-bin\

 

no cabeçalho (primeira linha do seu script) você coloca o caminho do seu interpretador python, que ta dentro de onde foi instalado

 

#!C:\\Python25\\python.exe

#restante do código

dai você vai no seu IE ou FF, e digita lá, http://localhost/cgi-bin/nome_script.py

 

lembrando que se você colocar só http://localhost/cgi-bin, vai dar que você não tem permissão, entaum coloque o caminho completo ok?

 

bem, é isso ai só, esses são os detalhes, se não funcionar, alguma coisa ta errada ai =) ai a gente vai e faz um passo a passo via MSN ok?

Share this post


Link to post
Share on other sites

beleza, mas esse final de semana talvez não de para postar nada, pq estou em viajem =/

 

mas logo quando chegar vou ver se posto mais alguma coisa =)

 

qualquer duvidas, to ae =)

Share this post


Link to post
Share on other sites

Vlw mesmo pelo tuto. Já encontrei varias apostilas de python mas essa de começar do zero é muito bom pessoal. Sou iniciante no zope e tenho sentido algumas dificuldades no trato do python. Isso aqui vai ser uma mão na roda. Segura aí, porque vamos crescer. Meu msn é helderdesouza@hotmail.com e mey skype é helder-souza. Adiciona aí pessoal, vamos formar um grupo forte.

Share this post


Link to post
Share on other sites

aeeee pessoal =) ta dando vontade de voltar a escrever, mas essa época de festa é complicado =)

 

mas vou voltar logo logo =)

alias, gostei da idéia do grupo hem ^^

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.