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 em Python em diferentes áreas:
- os fundamentos da linguagem;
- gerenciamento de bancos de dados MySQL e PostgreSQL;
- programação de rede TCP/ IP (protocolos HTTP, POP3, IMAP, SMTP);
- programação web MVC com o Framework FLASK;
- arquiteturas de três camadas e programação por interfaces;
Este não é um curso exaustivo de Python, mas uma coletânea de exemplos destinada a desenvolvedores que já tenham utilizado uma linguagem de script como Perl, PHP, VBScript, ou para desenvolvedores acostumados a linguagens tipadas, como Java ou C#, e que tenham interesse em conhecer uma linguagem de script orientada a objetos. Este documento não é adequado para leitores que nunca programaram ou têm pouca experiência em programação.
Este documento também não é um compêndio de “boas práticas”. O desenvolvedor experiente poderá, portanto, perceber que alguns códigos poderiam ser melhor escritos. O único objetivo deste documento é fornecer exemplos para quem deseja se iniciar na linguagem Python 3 e no framework Flask. Posteriormente, o leitor poderá aprofundar seu aprendizado com outros documentos.
Os scripts estão comentados e os resultados de sua execução são reproduzidos. Às vezes, são fornecidas explicações adicionais. O documento requer uma leitura ativa: para compreender um script, é preciso ler tanto o código quanto os comentários e os resultados da execução.
Os exemplos do documento estão disponíveis no endereço |AQUI|:

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 havia sido desenvolvido com o interpretador Python 2.7. Desde então, surgiram novas versões do Python, como a 3.x. Em fevereiro de 2020, estamos na versão 3.8. As versões 3.x trouxeram uma descontinuidade na portabilidade entre versões: códigos que rodam no Python 2.7 podem se tornar inutilizáveis no Python 3.x. Esse é o caso, principalmente, da saída para a console. Na versão 2.7, pode-se escrever [print "toto"], enquanto que na versão 3.x é preciso escrever [print("toto")]: é necessário colocar parênteses. Essa simples mudança faz com que a maioria dos códigos fornecidos com o documento de 2011 seja inutilizável diretamente no Python 3.x. É preciso 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 seções sobre programação TCP-IP e o uso de bancos de dados passaram por mudanças significativas;
- a seção sobre programação web, que era apenas uma introdução, agora é um curso completo utilizando o framework FLASK;
Para elaborar este curso, segui uma abordagem incomum: fiz uma adaptação do curso PHP [Introdução à linguagem PHP7 com exemplos (2019)]. Portanto, não segui as estruturas tradicionais dos cursos de Python ou Flask. Acima de tudo, eu queria saber como poderia fazer com o Python 3 o que havia 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 usar o fórum de discussão |forum| para relatá-los.
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 console – strings 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] | Gerenciamento de exceções | |
[fonctions] | Escopo das variáveis – modo de passagem de parâmetros – uso de módulos – o Python Path – parâmetros nomeados – funções recursivas | |
[fichiers] | Leitura/gravação de um arquivo de texto – gerenciamento de arquivos codificados em UTF-8 – gerenciamento de arquivos jSON | |
[impots/v01] | Versão 1 do exercício prático: cálculo do imposto de renda. O exercício está disponível em 18 versões – A versão 1 implementa uma solução procedural | |
[imports] | Gerenciamento das dependências de um aplicativo por meio da importação de módulos – é apresentado um método de gerenciamento de dependências – ele é utilizado em todo o documento – gerenciamento do Python Path | |
[impots/v02] | A versão 2 da aplicação retoma a versão 1, reunindo todas as constantes de configuração em um arquivo de configuração que também gerencia o Python Path | |
[impots/v03] | A versão 3 do aplicativo dá continuidade à versão 2, utilizando funções encapsuladas em um módulo — o gerenciamento de dependências é feito por meio da configuração — e introduz o arquivo 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 restante do documento – [BaseEntity] facilita as conversões entre objeto e dicionário | |
[troiscouches] | Arquitetura em camadas e programação por interfaces. Este capítulo apresenta os métodos de programação utilizados no restante do documento | |
[impots/v04] | Versão 4 do aplicativo – esta versão implementa uma solução com arquitetura em camadas, programação por interfaces e o uso de classes derivadas de [BaseEntity] e [MyException] | |
[databases/mysql] | Instalação do SGBD MySQL – conexão a um banco 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 – conexão a um banco de dados – criação de uma tabela – execução de comandos SQL SELECT, UPDATE, DELETE, INSERT – transação – consultas SQL configuradas | |
[databases/anysgbd] | Lançamento de código independente do SGBD | |
[databases/sqlalchemy] | O ORM (Mapeador Objeto-Relacional) SqlAlchemy – um ORM permite trabalhar de maneira unificada com diferentes SGBD - mapeamento de classes/tabelas SQL – operações nas classes de imagem das tabelas SQL | |
[impots/v05] | Versão 5 do aplicativo de cálculo de impostos – Utilização da arquitetura em camadas da versão 04 e doORM SqlAlchemy para trabalhar com as SGBD MySQL e PostgreSQL | |
[inet] | Programação na Internet – protocolo TCP / IP (Protocolo de Controle 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 Flask – exibição de uma página HTML – serviço web jSON – solicitações GET e POST – gerenciamento 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 cálculo de impostos com arquitetura multicamadas – Desenvolvimento de um cliente web para esse servidor com 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 aprimorada: o cliente e o servidor são multithread – utilitários [Logger] para registrar 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 aprimorada com o uso de uma sessão web | |
[xml] | Gerenciamento da 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 foi modificada para permitir trocas 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 consultas GET, utiliza-se uma única consulta POST com os N contribuintes no corpo da consulta POST | |
[impots/http-servers/06] [impots/http-clients/06] | Versão 11 do exercício prático – a arquitetura cliente/servidor do aplicativo é 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 – uso 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 – gerenciamento de sessão com o módulo [flask_session] e um servidor Redis – uso de senhas criptografadas | |
[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 lidar com dois tipos de ações: ASV (Ação Show View), que servem apenas para exibir uma visualização sem alterar o estado do servidor, ADS (Ação Do Something), que executam uma ação que altera o estado do servidor – todas essas ações terminam com um redirecionamento para uma ação ASV – isso permite gerenciar corretamente as atualizações de página do navegador do cliente | |
[impots/http-servers/11] | Versão 16 do aplicativo – gerenciamento das ações URL com prefixo | |
[impots/http-servers/12] | Versão 17 do aplicativo – migração da versão 16 para um servidor Apache/Windows | |
[impots/http-servers/13] | Versão 18 do aplicativo – corrige uma falha da versão 17 |
A versão final do exercício de aplicação é um aplicativo cliente/servidor para cálculo de impostos com a seguinte arquitetura:

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

O conteúdo do documento é denso. O leitor que chegar até o 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 em outras 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:
-
instalar um ambiente de trabalho:
- um interpretador de Python;
- a Comunidade IDE PyCharm;
- Laragon (servidor Apache, SGBD MySQL, servidor Redis);
- o SGBD PostgreSQL;
- o cliente HTTP Postman;
- o servidor de e-mails hMailServer;
-
explorar o código dos exemplos |AQUI|:
- em cada pasta, há um arquivo [README.md] que vincula a pasta a um capítulo do curso e resume seu conteúdo:

O arquivo [README.md] tem a seguinte aparência:

É improvável que o leitor leia o curso inteiro:
- o leitor iniciante poderá ler os capítulos 1 a 15 e parar por aí. Em seguida, poderá dedicar algum tempo a programar seus próprios scripts em Python antes de voltar a este curso;
- o leitor que já tenha noções básicas de Python e queira se iniciar em bancos de dados e no ORM (Mapeador Objeto-Relacional) [sqlalchemy] poderá se limitar aos capítulos 16 a 20;
- o leitor que deseja se iniciar 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. Ele pode ser lido em dois níveis:
- para conhecer os protocolos da internet;
- para obter scripts que utilizam esses protocolos;
- o leitor que já tenha noções básicas de Python e queira se iniciar na programação web com o framework Flask deve ler o capítulo 22;
- o leitor que desejar aprofundar-se na programação web com o framework Flask poderá estudar os capítulos 23 a 38. Neles, construímos aplicativos cliente/servidor cada vez mais complexos, bem como um aplicativo HTML/Python seguindo o modelo de desenvolvimento MVC (Modelo – Vista – Controlador). Essa aplicação é desenvolvida no capítulo 32. É possível parar por aqui. Os capítulos seguintes trazem modificações não fundamentais;
Serge Tahé, setembro de 2020