= Webware Rapidinho =
[[http://www.webwareforpython.org/|Webware homepage]]
= O Que É? =
É uma suíte OO para desenvolvimento web, obviamente feito em Python.
O Webware é constituido de componentes chamados de ''kits'', entre eles o !WebKit é um servidor de aplicações para web.
= Como Baixar O Fonte? =
A última versão disponível (0.8.1) encontra-se em http://prdownloads.sourceforge.net/webware/Webware-0.8.1.tar.gz?download
= Como Eu Instalo? =
{{{
$ cd /usr/local (/opt ou aonde for mais adequado)
$ tar zxvf Webware-0.8.1.tar.gz
$ cd Webware-0.8.1/
$ python install.py
}}}
Isso vai instalar o framework, mas não é legal manter os dados do projeto (chamados de contextos) junto com o próprio Webware, por isso é melhor criar um lugar separado para o seu projeto. O Webware tem um script para isso.
{{{
$ cd /usr/local/Webware-0.8.1
$ python bin/MakeAppWorkDir.py /home/ruda/MyWebKit
}}}
Substitua {{{/home/ruda/MyWebKit}}} para onde for mais ao seu gosto.
= Servidor HTTP =
Sim, precisa do Apache rodando, não esqueça. Outros servidores também são suportados, veja a documentação. O Webware inclui um servidor HTTP de brinquedo, para rodar é fácil
{{{
$ cd /usr/local/Webware-0.8.1/WebKit/Adapters
$ ./HTTPAdapter --host=localhost --port=80 --daemon
}}}
mas não use, é muito fraquinho.
= Adaptadores =
O adaptador é o que liga a requisição do cliente via browser com o servidor de aplicações. O servidor de aplicações roda em uma porta diferente da 80 e por padrão é a porta 8086.
{{{
Cliente (via browser)
|
Servidor HTTP (porta 80)
|
Adaptador
|
AppServ (porta 8086)
}}}
* '''wkcgi''' é um CGI feito em C. É rápido e simples de usar.
Para instalar:
{{{
$ cd /usr/local/Webware-0.8.1/WebKit/Adapters/wkcgi
$ make
$ cp wkcgi /var/www/cgi-bin/wkcgi.cgi
}}}
'''Obs 1:''' O aplicativo apxs é necessário para compilar os modulos do apache. Na distribução debian (e baseadas em .deb como o ubuntu) você pode encontra-lo no pacote apache-dev.
'''Obs 2:''' Se mesmo depois de instalar o apache-dev o make continuar reclamando verifique o caminho do apxs dentro do arquivo Makefile e se necessário altere para o caminho correto.
* '''Webkit.cgi''' é um CGI feito em Python. Não use.
* '''!OneShot.cgi''' semelhante ao Webkit.cgi, muito útil durante a fase de desenvolvimento pois as páginas não ficam persistentes, elas são sempre relidas em cada leitura de página.
* '''mod_webkit''' é um módulo para plugar diretamente no Apache. É o método mais eficiente.
Para instalar (usando a versão para apache 1.x):
{{{
$ cd /usr/local/Webware-0.8.1/WebKit/Adapters/mod_webkit
$ make
$ cp mod_webkit.so /usr/lib/apache/1.3/
}}}
Edite o arquivo de configuração do apache e acrescente:
{{{
LoadModule webkit_module /usr/lib/apache/1.3/mod_webkit.so
AddType text/psp .psp
AddHandler psp-handler .psp
WKServer localhost 8086
SetHandler webkit-handler
}}}
= Como Iniciar O Servidor De Alicações? =
* Se escolher o modo wkcgi
{{{
$ cd /home/ruda/MyWebKit
$ ./AppServ
}}}
Agora é só abrir um browser e apontar para a url http://localhost/cgi-bin/wkcgi.cgi
= Como Parar O Servidor De Aplicações? =
Basta matar o servidor !AppServ, {{{^C}}} no terminal que ele está rodando ou matar com {{{kill }}}.
= Tenho O Webware Instalado, E Agora? =
* Leia a documentação oficial que deve estar em {{{/usr/local/Webware-0.8.1/Docs/}}} (comece pelo index.html).
* Leia o Wiki do Webware http://wiki.w4py.org/
* Comece modificando o {{{/home/ruda/MyWebKit/MyContext/Main.py}}}
= Um pequeno Exemplo =
Este exemplo substitui o {{{/.../MyWebkit/MyContext/Main.py}}} que foi criado
conforme as instruções anteriores, talvez seja legal copiar o original para ter como referência.
{{{#!python
from WebKit.Page import Page
class Main(Page):
def writeContent(self, msg=''):
fruits = self.session().value('fruits', [])
self.writeln('Cesta de Frutas
')
if fruits:
self.writeln('Disponível na cesta:')
for fruit in fruits:
self.writeln('- ' + fruit)
self.writeln('
')
self.writeln('''
''')
if msg:
self.writeln('Resultado da última operação: %s'
% msg)
def actions(self):
return Page.actions(self) + ['add', 'remove', 'clear']
def add(self):
fruits = self.session().value('fruits', [])
new_fruit = self.request().field('new_fruit')
if not new_fruit in fruits:
fruits.append(new_fruit)
self.session().setValue('fruits', fruits)
msg = 'Adicionei a fruta na cesta.'
else:
msg = 'A fruta já está na cesta.'
self.writeContent(msg)
def remove(self):
fruits = self.session().value('fruits', [])
rm_fruit = self.request().field('remove_fruit')
if rm_fruit in fruits:
fruits.remove(rm_fruit)
self.session().setValue('fruits', fruits)
msg = 'A fruta foi removida.'
else:
msg = 'A fruta não estava na cesta.'
self.writeContent(msg)
def clear(self):
if self.session().hasValue('fruits'):
self.session().delValue('fruits')
self.writeContent('A cesta foi limpa.')
}}}
ou baixe o [[attachment:Main.py]]
----
RudaMoura