Aplicação web em Python e Bottle – parte 1

bottle-1_abertura

O bottle é um micro framework para desenvolvimento de aplicações web em Python. É rápido, simples leve e pequeno (está contido em um único arquivo que não depende de outras bibliotecas externas) e possui mecanismos de roteamento de páginas, modelos (templates), servidor HTTP embutido e, claro, a possibilidade de usar (quase) tudo que está disponível para a linguagem.

Ideal para uma ideia que tive mas que não contarei agora… 😀

Antes de começar

Com certeza o Python já está instalado mas como pretendo utilizar a versão 3 e também o virtualenv (que geralmente não é instalado por padrão) é bom (tentar) forçar a instalação deles:

$ sudo apt-get install python3 virtualenv
Lendo listas de pacotes... Pronto
Construindo árvore de dependências       
...
Configurando python3-virtualenv (15.0.1+ds-3) ...
Configurando virtualenv (15.0.1+ds-3) ...

Agora é possível seguir com a instalação do bottle.

Instalação

A primeira coisa é criar um repositório para os arquivos do projeto:

$ mkdir -p ~/Projetos/python/bottle
$ cd ~/Projetos/python/bottle

Criar um ambiente virtual para o desenvolvimento:

$ virtualenv --python=python3 py3
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/.../py3/bin/python3
Also creating executable in /home/.../py3/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.

Ativá-lo e dentro dele instalar o bottle utilizando o pip:

$ source py3/bin/activate
(py3) $ pip install bottle
Collecting bottle
  Downloading bottle-0.12.10.tar.gz (69kB)
    100% |████████████████████████████████| 71kB 189kB/s 
Building wheels for collected packages: bottle
  Running setup.py bdist_wheel for bottle ... done
  Stored in directory: /home/giovanni/.cache/pip/wheels/...
Successfully built bottle
Installing collected packages: bottle
Successfully installed bottle-0.12.10

Para não perder o hábito:

(py3) $ echo "py3" >.gitignore
(py3) $ git init
Initialized empty Git repository in /home/giovanni/Projetos/.../.git

E agora pode-se seguir adiante.

A aplicação

Por enquanto algo simples, algo que responda conexões simples e avise no caso de algum página inexistente:

Explicação rápida:

  • O “import bottle” cuidará da carga do módulo;
  • O símbolo @ na frente dos métodos bottle.route() e bottle.error() funciona como um decorator e sua função é modificá-los em tempo de execução* definindo a saída para a rota padrão, ou seja, o “/” e customizando uma mensagem para o “erro 404” e
  • A última linha executa o servidor HTTP apenas para o endereço de localhost e escutando a porta 8080.

Por enquanto não estou preocupado em informar corretamente o conteúdo do que é retornado pelo protocolo HTTP, tanto que nem incluí tags HTML nas saídas.

(*) Assumo que é um conceito novo para mim e que ainda não o digeri direito… só sei que é assim que ele funciona. 🙂

Executando o servidor

Para executar a aplicação basta executar o programa:

(py3) $ ./server.py 
Bottle v0.12.10 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

127.0.0.1 - - [07/Nov/2016 00:01:48] "GET / HTTP/1.1" 200 15
127.0.0.1 - - [07/Nov/2016 00:01:54] "GET /0123456789 HTTP/1.1" 404 24

O servidor web com o esqueleto de aplicação funcionando corretamente. E você até pode montar uma rotina bem simples de testes para testá-lo:

É simples mas fácil de expandir e sofisticar para testes futuros.

Considerações finais

Para não perder o costume:

(py3) $ deactivate
$ git add --all
$ git commit -m "primeira versão"
[master (root-commit) c839e93] primeira versão
 2 files changed, 16 insertions(+)
 create mode 100644 .gitignore
 create mode 100755 server.py

O deactivate desfaz as alterações realizadas pelo próprio virtualenv mas não é obrigatório executá-lo antes da utilização do Git. Fiz apenas porque precisaria fazê-lo em algum momento. 🙂

Na próxima parte criarei páginas HTML mais decentes para a aplicação, além de mais algumas regras de roteamento e também um esboço de REST. E com relação à minha ideia, acontece que ganhei um Intel Edison já faz algum tempo e finalmente pensei em uma aplicação para implementar nele.

Até!

Anúncios

3 comentários sobre “Aplicação web em Python e Bottle – parte 1

  1. Pingback: Orientação a objetos em Python, o básico | giovannireisnunes

  2. Pingback: Aplicação web em Python e Bottle – parte 2 | giovannireisnunes

  3. Pingback: Aplicação web em Python e Bottle – parte 3 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s