Python Flask Básico

Breve tutorial sobre como usar o Flask, para fazer seu sites e projetos utilizando Python.

[ Hits: 15.190 ]

Por: Alisson Machado em 30/10/2016


Introdução



Esse é um post, um breve tutorial de como usar o Flask para fazer seu sites e projetos utilizando Python.

A primeira coisa a fazer é instalar o Flask.

pip install flask

Segue abaixo a estrutura mínima para uma aplicação em Flask:

#!/usr/bin/python

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello Flask!"

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 em Flask, pois é ele que vamos executar e será responsável por chamar os próximos.

Entendendo um pouco do código:

app = Flask(__name__) → nessa linha é instanciado um objeto da classe Flask, é ele que vamos utilizar para configurar a nossa aplicação e para executa-la com o servidor de testes do próprio Flask.

@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 Flask!"
→ é a função que tem como objetivo retornar somente um texto plano como Hello Flask.

if __name__ == '__main__':
    app.run(debug=True)
→ essas instruções definem que quando o "run.py" for executado via linha de comando. O Flask 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 ter em Flask.

Para acessar a sua aplicação, você pode acessar o endereço: http://localhost:5000

Continuando:

5000 → é a porta padrão do Flask, você pode mudá-la passando o parâmetro "port no contrutor", deixando ele da seguinte forma:

if __name__ == '__main__':
    app.run(debug=True,port=6543)

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" do Flask.

Para isso, logo após o import do Flask, 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 do Flask 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" do próprio Flask, isso é feito da mesma maneira em que foi feito o jsonify.

from flask import Flask,render_template

Por padrão o Flask, irá olhar o diretório "template", no 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")

Como o Flask 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 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 pelo Flask, é 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 "p"osts, 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 %}
</ul>

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 "{{ variavel }}", 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 oficial:
Para saber mais sobre o Flask, você pode consultar a documentação oficial também:
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.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Vault: SSH com OneTimePassword

paramiko - Python + SSH

Python - Threads

Sockets em Python

MongoDB Aggregation

Leitura recomendada

Pydev - Preparando o Eclipse para o Python

Monitorando produtos no ML com Python 3 via BeautifulSoup

Reconhecimento de placas de veículos com OpenALPR

Criando um leitor de RSS com Python

Python para pesquisadores: material didático

  
Comentários
[1] Comentário enviado por Lisandro em 31/10/2016 - 22:46h

Legal te achar aqui Allison. Lembrei de ti la do TDC falando do Heimdall Guard - Spam Filter. Gostei muito deste teu artigo de Flask e vou ler os demais também.
Abraço
Lisandro

[2] Comentário enviado por AlissonMMenezes em 01/11/2016 - 13:54h

Opa! Eae Lisandro!

Muito legal que você tenha visto o meu tutorial, tenho bastante coisa ai na internet perdida, mas to tentando centralizar tudo aqui no meu blog: alissonmachado.com.br

Qualquer coisa só mandar um salve \o

Até mais



[3] Comentário enviado por azk em 17/11/2016 - 09:46h

Daora. Flask é legal!
O texto em si ficou bem introdutório e didático.
Boa!

[4] Comentário enviado por eduardofaneli em 19/04/2018 - 15:14h

Alisson boa tarde, fiz uma página com flask que faz a consulta de informações no banco de dados e me retorna em um html algumas informações, existe alguma forma de fazer com que essa página seja atualizada automaticamente de alguma forma?

[5] Comentário enviado por mlmartins em 24/07/2018 - 11:46h

Caro Alisson, blz?
Sou novo em Flask e gostaria de criar um REST API. Você poderia me ajudar?

Grato amigo...

Marcos Lopes Martins
Dev-Ops Python/Django

[6] Comentário enviado por AlissonMMenezes em 24/07/2018 - 19:09h


[5] Comentário enviado por mlmartins em 24/07/2018 - 11:46h

Caro Alisson, blz?
Sou novo em Flask e gostaria de criar um REST API. Você poderia me ajudar?

Grato amigo...

Marcos Lopes Martins
Dev-Ops Python/Django


Olá Marcos, eu fiz um post no meu blog esses dias falando sobre flask e testes de api.

http://alissonmachado.com.br/python-flask-decorators-e-pytest/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts