Skip to content

1. Prefácio

O PDF deste documento está disponível |AQUI|.

Os exemplos deste documento estão disponíveis |AQUI|.

Este documento apresenta uma lista de scripts Python em diferentes áreas:

  • os fundamentos da linguagem;
  • gestão de bases de dados MySQL e PostgreSQL;
  • programação de redes TCP/ IP (protocolos HTTP, POP3, IMAP, SMTP);
  • programação web MVC com o Framework FLASK;
  • as arquiteturas de três camadas e a programação por interfaces;

Este não é um curso exaustivo sobre Python, mas sim uma compilação de exemplos destinada a programadores que já tenham utilizado uma linguagem de script como Perl, PHP, VBScript, ou a programadores habituados a linguagens tipadas, como Java ou C#, e que estejam interessados em descobrir uma linguagem de script orientada para objetos. Este documento não é adequado para leitores que nunca tenham programado ou que tenham pouca experiência em programação.

Este documento também não é um compêndio de «boas práticas». O programador experiente poderá, assim, considerar que alguns códigos poderiam ser melhor escritos. O único objetivo deste documento é fornecer exemplos a quem deseja iniciar-se na linguagem Python 3 e no framework Flask. Posteriormente, o leitor poderá aprofundar a sua aprendizagem com outros documentos.

Os scripts estão comentados e os resultados da sua execução são apresentados. Por vezes, são fornecidas explicações adicionais. O documento requer uma leitura ativa: para compreender um script, é necessário ler simultaneamente o seu código, os seus comentários e os resultados da sua execução.

Os exemplos do documento estão disponíveis no endereço |AQUI|:

Image

O documento é uma atualização de um documento anterior publicado em junho de 2011 |https://tahe.developpez.com/tutoriels-cours/python/|. O documento de 2011 tinha sido criado com o interpretador Python 2.7. Desde então, surgiram novas versões do Python 3.x. Em fevereiro de 2020, estamos na versão 3.8. As versões 3.x introduziram uma descontinuidade na portabilidade entre versões: códigos que se executam no Python 2.7 podem revelar-se inutilizáveis no Python 3.x. É nomeadamente o caso da escrita na consola. Na versão 2.7, pode escrever-se [print "toto"], enquanto que na versão 3.x é necessário escrever [print("toto")]: é preciso colocar parênteses. Esta simples alteração faz com que a maioria dos códigos fornecidos com o documento de 2011 sejam inutilizáveis diretamente com o Python 3.x. É necessário modificá-los.

Este novo documento não se limita a atualizar os códigos de 2011 para que sejam executáveis com o Python 3.8:

  • as secções sobre programação TCP-IP e a utilização de bases de dados sofreram alterações significativas;
  • a secção sobre programação web, que era apenas uma introdução, é agora um curso completo que utiliza o framework FLASK;

Para criar este curso, segui uma abordagem invulgar: fiz uma adaptação do curso PHP [Introduction au langage PHP7 par l’exemple]. Por isso, não segui as estruturas tradicionais dos cursos de Python ou Flask. Queria, acima de tudo, saber como poderia fazer com o Python 3 o que tinha feito no PHP 7. O resultado foi que consegui refazer, em Python 3 / Flask, todos os exemplos do curso PHP 7.

Este documento pode conter erros ou lacunas. O leitor pode utilizar o fórum de discussão |forum| para os sinalizar.

O conteúdo do documento é o seguinte:

Capítulo
Pasta do código
Conteúdo
   
 
Apresentação do curso
 
Instalação de um ambiente de trabalho
[bases]
Noções básicas da linguagem Python – estruturas da linguagem – tipos de dados – funções – saída na consola – cadeias de formatação – conversão de tipos – listas – dicionários – expressões regulares
[strings]
Notação de cadeias de caracteres – métodos da classe <str> – codificação/decodificação de cadeias de caracteres em UTF-8
[exceptions]
Gestão de exceções
[fonctions]
Âmbito das variáveis – modo de passagem de parâmetros – utilização de módulos – o Python Path – parâmetros nomeados – funções recursivas
[fichiers]
Leitura/gravação de um ficheiro de texto – gestão de ficheiros codificados em UTF-8 – gestão de ficheiros jSON
[impots/v01]
Versão 1 do exercício prático: cálculo do imposto sobre o rendimento. A aplicação está disponível em 18 versões – A versão 1 implementa uma solução procedural
[imports]
Gestão das dependências de uma aplicação através da importação de módulos – é apresentado um método de gestão de dependências – este é utilizado ao longo de todo o documento – gestão do Python Path
[impots/v02]
A versão 2 da aplicação retoma a versão 1, reunindo todas as constantes de configuração num ficheiro de configuração que também gere o Python Path
[impots/v03]
A versão 3 da aplicação retoma a versão 2, utilizando funções encapsuladas num módulo — a gestão das dependências é feita por configuração — introdução do ficheiro jSON para ler os dados necessários ao cálculo do imposto e gravar os resultados dos cálculos
[classes/01]
Classes – herança – métodos e propriedades – getters/setters – construtor – propriedade [__dict__]
[classes/02]
Apresentação das classes [BaseEntity] e [MyException] utilizadas no resto do documento – [BaseEntity] facilita as conversões objeto/dicionário
[troiscouches]
Arquitetura em camadas e programação por interfaces. Este capítulo apresenta os métodos de programação utilizados no resto do documento
[impots/v04]
Versão 4 da aplicação – esta versão implementa uma solução com uma arquitetura em camadas, programação por interfaces e a utilização de classes derivadas de [BaseEntity] e [MyException]
[databases/mysql]
Instalação do SGBD MySQL – ligação a uma base de dados – criação de uma tabela – execução de comandos SQL SELECT, UPDATE, DELETE, INSERT – transação – consultas SQL configuradas
[databases/postgresql]
Instalação do SGBD PostgreSQL – ligação a uma base de dados – criação de uma tabela – execução de ordens SQL SELECT, UPDATE, DELETE, INSERT – transação – consultas SQL configuradas
[databases/anysgbd]
Codificação independente do SGBD
[databases/sqlalchemy]
O ORM (Mapeador Objeto-Relacional) SqlAlchemy – um ORM permite trabalhar de forma unificada com diferentes SGBD - mapeamento de classes/tabelas SQL – operações nas classes de imagem das tabelas SQL
[impots/v05]
Versão 5 da aplicação de cálculo de impostos – Utilização da arquitetura em camadas da versão 04 e daORM SqlAlchemy para trabalhar com as SGBD MySQL e PostgreSQL
[inet]
Programação na Internet – protocolo TCP / IP (Protocolo de Controlo de Transferência / Protocolo de Internet) – protocolos HTTP (HyperText Protocolo de Transferência) – SMTP (Protocolo Simples de Transferência de Correio) – POP (Protocolo de Correio) – IMAP (Protocolo de Acesso a Mensagens da Internet)
[flask]
Serviços web com o framework web Flask – visualização de uma página HTML – serviço web jSON – pedidos GET e POST – gestão de uma sessão web
[impots/http-servers/01]
[impots/http-clients/01]
Versão 6 do exercício prático – Criação de um serviço web jSON para o cálculo do imposto com uma arquitetura multicamadas – Programação de um cliente web para este servidor com uma arquitetura multicamadas – programação cliente/servidor – utilização do módulo [requests]
[impots/http-servers/02]
[impots/http-clients/02]
Versão 7 do exercício da aplicação – a versão 6 foi melhorada: o cliente e o servidor são multithread – utilitários [Logger] para registar as trocas cliente/servidor – [SendMail] para enviar um e-mail ao administrador da aplicação
[impots/http-servers/03]
[impots/http-clients/03]
Versão 8 do exercício prático – a versão 7 foi melhorada através da utilização de uma sessão web
[xml]
Gestão do XML (Linguagem de Marcação eXtended) com o módulo [xmltodict]
[impots/http-servers/04]
[impots/http-clients/04]
Versão 9 do exercício prático – a versão 8 é alterada para permitir comunicações cliente/servidor em XML;
[impots/http-servers/05]
[impots/http-clients/05]
Versão 10 do exercício prático – em vez de processar N contribuintes por meio de N pedidos GET, utiliza-se um único pedido POST com os N contribuintes no corpo do POST
[impots/http-servers/06]
[impots/http-clients/06]
Versão 11 do exercício prático – a arquitetura cliente/servidor da aplicação é alterada: a camada [métier] passa do servidor para o cliente
[impots/http-servers/07]
Versão 12 do exercício prático – esta versão implementa um servidor MVC (Model – View – Controller) que fornece, indistintamente, a pedido do cliente, jSON, XML e HTML. Este capítulo implementa as versões jSON e XML do servidor
[impots/http-clients/07]
Implementação dos clientes jSON e XML do servidor MVC da versão 12
[impots/http-servers/07]
Implementação do servidor HTML da versão 12 – utilização do framework CSS Bootstrap –
[impots/http-servers/08]
Versão 13 do exercício prático – Refatoração do código da versão 12 – gestão da sessão com o módulo [flask_session] e um servidor Redis – utilização de palavras-passe encriptadas
[impots/http-servers/09]
[impots/http-clients/09]
Versão 14 do exercício prático – implementação do URL com um token CSRF (Cross Site Request Forgery)
[impots/http-servers/10]
Versão 15 do exercício prático – refatoração do código da versão 14 para gerir dois tipos de ações: ASV (Ação Show View), que servem apenas para apresentar uma vista sem alterar o estado do servidor, ADS (Ação «Do Something»), que executam uma ação que altera o estado do servidor – todas estas ações terminam com um redirecionamento para uma ação ASV – o que permite gerir corretamente as atualizações da página no navegador do cliente
[impots/http-servers/11]
Versão 16 da aplicação – gestão das URL com prefixo
[impots/http-servers/12]
Versão 17 da aplicação – migração da versão 16 para um servidor Apache / Windows
[impots/http-servers/13]
Versão 18 da aplicação – corrige uma anomalia da versão 17

A versão final do exercício da aplicação é uma aplicação cliente/servidor para o cálculo de impostos com a seguinte arquitetura:

Image

A camada [web] acima é implementada com uma arquitetura MVC:

Image

O conteúdo do documento é denso. O leitor que o ler até ao fim terá uma boa visão da programação web MVC em Python/Flask e, além disso, uma boa visão da programação web MVC noutras linguagens.

O leitor que preferir ver o código, testá-lo e modificá-lo em vez de ler um curso poderá proceder da seguinte forma:

Image

O ficheiro [README.md] tem o seguinte aspeto:

Image

É improvável que o leitor leia o curso na íntegra:

  • um leitor iniciante poderá ler os capítulos 1 a 15 e ficar por aí. Poderá, em seguida, dedicar algum tempo a programar os seus próprios scripts em Python antes de regressar a este curso;
  • o leitor que já tenha noções básicas de Python e queira iniciar-se em bases de dados e no ORM (Object Relational Mapper) [sqlalchemy] poderá limitar-se aos capítulos 16 a 20;
  • o leitor que pretenda iniciar-se na programação para a Internet (HTTP, SMTP, POP3, IMAP) poderá ler o capítulo 21. Este capítulo é bastante complexo e apresenta scripts avançados. Pode ser lido em dois níveis:
    • para descobrir os protocolos da Internet;
    • para obter scripts que utilizam esses protocolos;
  • o leitor que possua noções básicas de Python e pretenda iniciar-se na programação web com o framework Flask deverá ler o capítulo 22;
  • o leitor que pretenda aprofundar a programação web com o framework Flask poderá estudar os capítulos 23 a 38. Neles, constroem-se aplicações cliente/servidor cada vez mais complexas, bem como uma aplicação HTML/Python seguindo o modelo de desenvolvimento MVC (Modelo – Vista – Controlador). Esta aplicação é desenvolvida no capítulo 32. Pode parar por aqui. Os capítulos seguintes introduzem alterações não fundamentais;

Serge Tahé, setembro de 2020