Miguel Grinberg
Novatec
Authorized Portuguese translation of the English edition of Flask Web Development ISBN 9781491991732 © 2018 Miguel Grinberg. This translation is published and sold by permission of O'Reilly Media, Inc., the owner of all rights to publish and sell the same. Tradução em português autorizada da edição em inglês da obra Flask Web Development ISBN 9781491991732 © 2018 Miguel Grinberg. Esta tradução é publicada e vendida com a permissão da O'Reilly Media, Inc., detentora de todos os direitos para publicação e venda desta obra. © Novatec Editora Ltda. [2018]. Copyright © 2018 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia A. Kinoshita Revisão gramatical: Smirna Cavalheiro Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-681-0 Histórico de impressões: Junho/2018
Primeira edição
Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec LIS20180525
capítulo 1
Instalação
O Flask (http://flask.pocoo.org/) é um pequeno framework de acordo com a maioria dos padrões – pequeno suficiente para ser chamado de “microframework” e também a ponto de ser provável que, depois de conhecê-lo, você seja capaz de ler e compreender todo o seu código-fonte. Ser pequeno, porém, não significa que ele faça menos que outros frameworks. O Flask foi projetado para ser um framework extensível desde o início; ele provê um núcleo sólido com os serviços básicos, enquanto as extensões oferecem o restante. Pelo fato de poder escolher os pacotes de extensão que quiser, você acabará com uma pilha enxuta, sem excessos, que fará exatamente o que for necessário. O Flask tem três dependências principais. Os subsistemas de roteamento, depuração e WSGI (Web Server Gateway Interface, ou Interface de Gateway de Servidor Web) são do Werkzeug (http://werkzeug.pocoo.org/); o suporte para templates é oferecido pelo Jinja2 (http://jinja.pocoo.org/), e a integração com a linha de comando pelo Click (http://click.pocoo.org). O autor de todas essas dependências é Armin Ronacher, autor do Flask. O Flask não tem suporte nativo para acessar bancos de dados, validar formulários web, autenticar usuários nem outras tarefas de alto nível. Esses e muitos outros serviços essenciais, necessários à maioria das aplicações web, estão disponíveis por meio de extensões que se integram aos pacotes nucleares. Como desenvolvedor, você pode escolher cuidadosamente as extensões que sejam mais apropriadas ao seu projeto ou até mesmo escrever suas próprias extensões, caso se sinta inclinado a fazê-lo. É uma situação que contrasta com um framework maior, no qual a maioria das escolhas já foi feita para você, e elas são difíceis ou, às vezes, até impossíveis de mudar. Neste capítulo, você aprenderá a instalar o Flask. O único requisito é um computador com Python instalado. 23
24
Desenvolvimento web com Flask
Os códigos de exemplo deste livro foram conferidos para que funcionem com
Python 3.5 e 3.6. O Python 2.7 também pode ser usado se você quiser, mas considerando que essa versão de Python não será mais mantida depois de 2020, é fortemente recomendado que você utilize versões 3.x. Se você planeja usar um computador com Microsoft Windows para trabalhar com os códigos de exemplo, é necessário decidir se você quer usar uma abordagem “nativa” baseada em ferramentas Windows ou configurar o seu computador de modo que seja possível adotar o conjunto mais convencional de ferramentas baseadas em Unix. O código apresentado neste livro é, em sua maior parte, compatível com as duas abordagens. Nos poucos casos em que as abordagens diferem, a solução Unix será seguida e alternativas para o Windows serão apontadas. Se você decidir seguir um fluxo de trabalho Unix, há algumas opções. Se estiver usando o Windows 10, poderá ativar o WSL (Windows Subsystem for Linux, ou Subsistema do Windows para Linux) – um recurso com suporte oficial, que cria uma instalação Ubuntu Linux, a qual executa juntamente com a interface Windows nativa, provendo um acesso a um shell bash e ao conjunto completo de ferramentas baseadas em Unix. Se o WSL não estiver disponível em seu sistema, outra boa opção é o Cygwin (https://www.cygwin.com/), um projeto de código aberto que emula o subsistema POSIX usado pelo Unix e porta várias ferramentas Unix.
Criando o diretório da aplicação Para começar, é preciso criar o diretório que hospedará o código de exemplo, disponível em um repositório do GitHub. Conforme discutido na seção “Como trabalhar com o código de exemplo”, o modo mais conveniente de fazer isso é por meio de um checkout do código diretamente do GitHub usando um cliente Git. Os comandos a seguir fazem o download do código de exemplo do GitHub e iniciam a aplicação com a versão 1a, que é a versão inicial com a qual você trabalhará: $ git clone https://github.com/miguelgrinberg/flasky.git $ cd flasky $ git checkout 1a
Se preferir não usar o Git e quiser digitar manualmente o código ou copiá-lo, você pode simplesmente criar um diretório vazio para a aplicação, assim: $ mkdir flasky $ cd flasky
Capítulo 1 ■ Instalação
25
Ambientes virtuais Agora que o diretório da aplicação foi criado, é hora de instalar o Flask. O modo mais conveniente de fazer isso é usar um ambiente virtual. Um ambiente virtual é uma cópia do interpretador Python; nesse ambiente, você pode instalar pacotes de forma privada, sem afetar o interpretador Python global de seu sistema. Os ambientes virtuais são muito úteis, pois evitam pacotes desorganizados e conflitos de versão com o interpretador Python do sistema. Criar um ambiente virtual para cada projeto garante que as aplicações tenham acesso somente aos pacotes que usam, enquanto o interpretador global permanece limpo e organizado, servindo apenas como uma fonte a partir da qual outros ambientes virtuais podem ser criados. Como vantagem adicional, de modo diferente do interpretador Python válido para todo o sistema, os ambientes virtuais podem ser criados e gerenciados sem direitos de administrador.
Criando um ambiente virtual com Python 3 A criação de ambientes virtuais é uma área em que os interpretadores de Python 3 e de Python 2 diferem. Com o Python 3, os ambientes virtuais são aceitos de modo nativo pelo pacote venv, que faz parte da biblioteca-padrão de Python.
Se você estiver usando a versão stock do interpretador Python 3 em um sistema Ubuntu Linux, o pacote venv padrão não será instalado como norma. Para adicioná-lo ao sistema, instale o pacote python3-venv, assim: $ sudo apt-get install python3-venv
O comando que cria um ambiente virtual tem a seguinte estrutura: $ python3 -m venv virtual-environment-name
A opção -m venv executa o pacote venv da biblioteca-padrão como um script independente, passando o nome desejado como argumento. Você criará agora um ambiente virtual no diretório flasky. Uma convenção usual para ambientes virtuais é chamá-los de venv, mas você pode usar um nome diferente se preferir. Certifique-se de que o seu diretório atual seja o flasky e, então, execute o comando a seguir: $ python3 -m venv venv
26
Desenvolvimento web com Flask
Depois que o comando terminar de executar, você terá um subdiretório de nome venv em flasky, com um ambiente virtual novo contendo um interpretador Python para uso exclusivo nesse projeto.
Criando um ambiente virtual com Python 2 O Python 2 não tem um pacote venv. Nessa versão do interpretador Python, os ambientes virtuais são criados com o utilitário de terceiro virtualenv. Certifique-se de que o seu diretório atual seja o flasky e então use um dos dois comandos a seguir, conforme o seu sistema operacional. Se você estiver usando Linux ou macOS, o comando será: $ sudo pip install virtualenv
Se estiver usando o Microsoft Windows, abra uma janela de prompt de comandos usando a opção “Run as Administrator” (Executar como administrador) e então execute o comando a seguir: $ pip install virtualenv
O comando virtualenv aceita o nome do ambiente virtual como argumento. Certifique-se de que o seu diretório atual seja o flasky e execute o comando a seguir para criar um ambiente virtual chamado venv: $ virtualenv venv New python executable in venv/bin/python2.7 Also creating executable in venv/bin/python Installing setuptools, pip, wheel...done.
Um subdiretório de nome venv será criado no diretório atual e todos os arquivos associados ao ambiente virtual estarão dentro dele.
Trabalhando com um ambiente virtual Ser quiser começar a usar um ambiente virtual, é necessário “ativá-lo”. Se você estiver usando um computador Linux ou macOS, poderá ativar o ambiente virtual com este comando: $ source venv/bin/activate
Capítulo 1 ■ Instalação
27
Se estiver usando o Microsoft Windows, o comando de ativação é: $ venv\Scripts\activate
Quando um ambiente virtual é ativado, o local em que está o seu interpretador Python será adicionado à variável de ambiente PATH em sua sessão atual de comandos, a qual determina o lugar em que os arquivos executáveis serão procurados. Para lembrá-lo de que você ativou um ambiente virtual, o comando de ativação modifica o seu prompt de comandos de modo a incluir o nome do ambiente: (venv) $
Depois que um ambiente virtual for ativado, digitar python no prompt de comandos chamará o interpretador desse ambiente, em vez de chamar o interpretador do sistema. Se você estiver usando mais de uma janela de prompt de comandos, será necessário ativar o ambiente virtual em cada uma delas.
Embora ativar um ambiente virtual seja, em geral, a opção mais conveniente, você também pode usar um ambiente virtual sem ativá-lo. Por exemplo, um console Python para o ambiente virtual venv pode ser iniciado executando venv/bin/python no Linux ou no macOS, ou venv\Scripts\python no Windows.
Quando acabar de trabalhar com o ambiente virtual, digite deactivate no prompt de comandos para restaurar a variável de ambiente PATH de sua sessão de terminal e o prompt de comandos aos seus estados originais.
Instalando pacotes Python com o pip Pacotes Python são instalados com o gerenciador de pacotes pip, que está incluído em todos os ambientes virtuais. Assim como o comando python, digitar pip em uma sessão do prompt de comandos chamará a versão dessa ferramenta pertencente ao ambiente virtual ativado. Para instalar o Flask no ambiente virtual, certifique-se de que o ambiente virtual venv esteja ativado e então execute o comando a seguir: (venv) $ pip install flask
Ao executar esse comando, o pip não só instalará o Flask, mas também instalará todas as suas dependências. É possível verificar quais pacotes estão instalados no ambiente virtual a qualquer momento usando o comando pip freeze:
28
Desenvolvimento web com Flask (venv) $ pip freeze click==6.7 Flask==0.12.2 itsdangerous==0.24 Jinja2==2.9.6 MarkupSafe==1.0 Werkzeug==0.12.2
A saída de pip freeze inclui um detalhamento dos números de versão para cada pacote instalado. Os números de versão que você verá provavelmente serão diferentes daqueles exibidos aqui. Também é possível verificar se o Flask foi corretamente instalado iniciando o interpretador Python e tentando importá-lo: (venv) $ python >>> import flask >>>
Se nenhum erro for apresentado, pode se parabenizar: você estará pronto para o próximo capítulo, no qual você escreverá a sua primeira aplicação web.