Python Flask Básico

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

[ Hits: 15.283 ]

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

MongoDB Aggregation

Sincronizando Dados do PostgreSQL no Elasticsearch

Sockets em Python

Vault: SSH com OneTimePassword

Python - Threads

Leitura recomendada

Como isolar seus projetos Python com virtualenv (ambiente virtual)

Clicador automático de Tinder com Python

Criando Speed Test com Python

Sockets em Python

Trabalhando com permutações em ordem lexicográfica crescente

  
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