Introdução ao Flask

Prof. Diego Cirilo

Flask

  • Framework leve para sistemas web em Python
  • Mais simples que o Django para aplicações pequenas
  • Mais responsabilidade nas mãos do dev

Exemplo Básico

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<h1> Hello, world! </h1>"

Templates

  • O Flask usa a engine de templates Jinja2
  • Os templates por padrão ficam na pasta templates
  • Ex. templates/index.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>FlaskApp</title>
</head>
<body>
    <h1>Aplicação Flask</h1>
    <h2>Meu belo site no Flask.</h2>
    <h3>{{ variavel }}</h3>
</body>
</html>

Templates

  • Para carregar o template em app.py
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def index():
    texto = "Variável passada como parâmetro para o template!!"
    return render_template('index.html', variavel=texto)

Herança de templates

  • Faz sentido criar um template base e atualizar apenas o conteúdo
  • Ex. templates/base.html
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>{% block title %} {% endblock %}</title>
  </head>
  <body>
    <h1><a href="{{ url_for('index')}}">Meu Belo Site</a></h1>

    <div class="container">
        {% block content %} {% endblock %}
    </div>

  </body>
</html>

Página de conteúdo

{% extends 'base.html' %}

{% block content %}
{% block title %} Título do Meu Belo Site {% endblock %}
    <h2> Conteúdo do meu belo site! </h2>
{% endblock %}

Laços

  • No template
{% for comment in comments %}
    <p>{{ comment }}</p>
{% endfor %}
  • No app.py
comments = ['comment a', 'comment b', 'comment c']
render_template('comments.html',comments=comments)

Condicionais

  • No template
{% for user in users %}
    {% if user['funcao'] == 'admin' %}
        {% set bg_color = 'red' %}
    {% else %}
        {% set bg_color = 'white' %}
    {% endif %}
    <p style="background-color: {{ bg_color }}">{{ comment }}</p>
{% endfor %}
  • No app.py
users = [
{'nome':'Jonas', 'funcao':'admin'}, 
{'nome':'James', 'funcao':'user'}, 
{'nome':'Jairo', 'funcao':'user'}, 
]
render_template('users.html',users=users)

Forms

  • No template
<form action="{{ url_for('create') }}" method="post">
    Nome: <input type="text" name="user_name"><br>
    Email: <input type="email" name="user_email"><br>
    <input type="submit" value="Enviar">
</form>
  • No app.py
@app.route('/user/create', methods=['GET','POST'])
def create():
    if request.method == 'POST':
        if not request.form['user_name']:
            flash('O nome é obrigatório!')
        else:
            user_data=user_api.create(request.form)
            return render_template('user.html', user_data=user_data)
    return render_template('create.html')

Dúvidas? 🤔