Guia Prático: Como Usar o Flask para Desenvolver Sites e Projetos em Python
Esse é um post é um breve tutorial de como usar o flask para fazer seu sites e projetos utilizando Python. Você irá criar um aplicativo básico que irá fazer inicialmente uma aplicação que retorna um texto plano, depois retornar um JSON que é o formato das REST APIs e no final a renderização de um conteúdo em HTML, que é o suficiente para entender os fundamentos de uso do Flask.
Sobre a solução
Flask é um microframework Web em Python, sendo assim ele possui somente os recursos básicos para a criação de páginas Webs e APIs, como por exemplo: Renderização de HTML, Rotas, Views e JSON, caso mais coisas sejam necessárias todas elas podem ser instaladas via pip.
Algumas das muitas extensões podem ser encontradas na página oficial.
Mão na massa
A primeira coisa a se fazer é instalar o pacote:
pip install flask
Segue abaixo a estrutura mínima para uma aplicação:
#!/usr/bin/python from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello!" if __name__ == '__main__': app.run(debug=True)
Você pode jogar esse código em um arquivo chamado run.py, esse será o arquivo principal da sua aplicação, pois é ele que vamos executar e ele será responsável por chamar os próximos.
Entendendo um pouco do código.
app = Flask(__name__)
Na linha acima é instanciado um objeto da classe Flask, é ele que vamos utilizar para configurar a nossa aplicação e para executá-la com o servidor de testes padrão da ferramenta.
@app.route("/")
É um decorator responsável por interpretar a rota que acessamos, então assim que é acessada a url / como é configurado na linha acima, a função que está abaixo é responsável por enviar uma rota ao navegador.
def index(): return "Hello!"
É a função que tem como objetivo retornar somente um texto plano como Hello.
if __name__ == '__main__': app.run(debug=True)
Essas instruções definem que quando o run.py for executado via linha de comando, o serviço deverá iniciar o seu servidor interno para executar a aplicação, como no construtor foi passado o valor True para a chave debug, o servidor será iniciado no modo debug, assim quando forem feitas modificações no código e elas forem salvas o servidor irá reiniciar automaticamente para que você possa testar o novo código.
Esse é o código mais básico que se pode.
Para acessar a sua aplicação, você pode acessar o endereço:
http://localhost:5000
5000 é a porta padrão do Flask, você pode mudá-la passando o parâmetro port no construtor, deixando ele da seguinte forma:
if __name__ == '__main__': app.run(debug=True,port=6543)
Padrão de retorno
Normalmente não retornamos um texto plano para o navegador e sim uma resposta em HTML, JSON ou até mesmo XML em caso de Webservices SOAP.
Para retornar um tipo JSON para o navegador, é necessário fazer o import do módulo jsonify.
Para isso logo após o import coloque uma vírgula e digite jsonify, ficando assim da seguinte forma:
from flask import Flask,jsonify
Esse recurso do Flask recebe como parâmetro um dicionário que será automaticamente convertido como JSON.
Assim mude a função index para ficar da seguinte maneira:
@app.route("/") def index(): return jsonify({"message":"Hello Json!"})
Salve o arquivo e veja que o servidor será reiniciado automaticamente, então acesse o navegador e veja como ficou.
Agora caso você queira retornar uma página em HTML, você precisará fazer o import do módulo render_template e isso é feito da mesma maneira em que foi feito o jsonify.
from flask import Flask,render_template
Por padrão será considerado o diretório template na mesmo diretório onde você está executando o arquivo run.py.
Então crie uma pasta template e dentro dela crie um página chamada index.html
Dentro dela você pode colocar o seguinte código:
<h1>Pagina HTML e Flask</h1>
Salve o código.
Agora vamos voltar para o python.
Na função onde você editou o return para jsonify, mude-o agora para render_template e coloque como valor index.html.
O código ficará assim:
@app.route("/") def index(): return render_template("index.html")
A solução já imagina que o arquivo html foi colocado dentro de templates, não é necessário passar o caminho completo do arquivo.
Salve o arquivo e teste no navegador novamente.
O Jinja2
O Flask trabalha com uma linguagem de template chamada Jinja2, ela serve para que possamos gerar o nosso arquivo HTML de forma dinâmica, assim é possível passar variáveis com valores no retorno da função e interpreta-los através do Jinja2.
Edite a função index deixando ela conforme o exemplo abaixo:
@app.route("/") def index(): nome = "Alisson" posts = ["Flask Basico","Flask Intermediario","Flask Avancado"] return render_template("index.html",nome=nome,posts=posts)
Talvez esse return tenha ficado um pouco confuso pois usei variáveis com o mesmo nome para os parâmetros chave/valor.
Após a definição de qual será a página html renderizada é possível passar variáveis do tipo dicionário como parâmetros para que elas possam ser utilizadas no nosso arquivo html.
Explicando melhor, quando vemos: nome=nome, isso significa que nome o primeiro, antes do sinal de igual, é a chave de um dicionário.
Então ele pode ser entendido da seguinte forma:
{"nome":}
O segundo nome, depois do sinal de igual é a variável nome declarada dentro da função, que tem o valor Alisson, assim o nosso dicionário ficou da seguinte forma:
{"nome":nome}
Caso eu queira traduzir interpretar o código ele ficou assim:
{"nome":"Alisson"}
E isso será retornado para que o Jinja2 possa utilizar e depois gerar o HTML.
A mesma coisa serve para a variável posts, porém no caso ela é uma lista e não uma string como no caso de nome.
Feito isso, salve o arquivo e agora edite o index.html, deixando ele da seguinte forma:
<h1>Blog do {{nome}}</h1> <h4>Posts Recentes</h4> <ul> <ul> {% for post in posts %} <li>{{post}}</li> {% endfor %}
Salve o HTML também e teste no navegador.
Você verá que as variáveis foram substituídas pelos valores no código, o Jinja2 entende os dicionários que foram passados através da função render_template e pode trazer os valores para o HTML.
Quando temos dicionários simples, como no caso de:
{"nome":"Alisson"}
Você pode chamar a chave nome dentro do html entre esses caracteres {{ variável }}, assim quando o html for carregado irá trazer o valor que corresponde a essa chave.
No caso da lista foi necessário efetuar um laço for para percorrer a lista em python e gerar uma lista em HTML.
No Jinja2 é possível fazer condições utilizando ifs e loopings utilizando for e while.
Caso vocẽ queira saber mais sobre o Jinja2 é só acessar a documentação.
Para saber mais sobre o Flask, você pode consultar a documentação oficial.
Mas vou fazer mais alguns posts explicando como eu utilizo o Flask no meu dia a dia e ensinando vocês a utilizarem também.
Até mais.
About author
Você pode gostar também
Entenda o que é e como funciona uma Máquina Virtual
O que é uma Máquina Virtual? Uma máquina virtual (VM) é um ambiente virtual que funciona como uma simulação de um computador, com sua própria CPU, memória, interface de rede
Entenda o Middleware: A espinha dorsal da conectividade digital
No cenário tecnológico atual, a conectividade é a espinha dorsal que sustenta nossa vida digital. Imagine um ecossistema complexo de aplicativos, serviços e dispositivos, todos operando em conjunto perfeito. Essa
Organize seus objetos de banco de dados com schemas PostgreSQL no Django
Que tal se você pudesse organizar seus objetos de bancos de dados (suas tabelas, views, functions, procedures etc.) em namespaces de acordo com suas respectivas funções no sistema? Neste artigo