Flask: desenvolvimento web com python

Fonte: Wikiversidade

Nesse tutorial, veremos o que é o Flask e como ele auxilia no desenvolvimento de sistemas de software, especialmente aqueles voltados para a Web.

O que é o Flask?

Flask é um microframework web escrito em Python. É denominado "micro" pois não necessita de ferramentas e/ou bibliotecas particulares externas para funcionar, apesar de ter grande extensibilidade dependendo da aplicação desejada. O Flask foi criado por Armin Ronacher em 2010 e é mantido pela comunidade de software livre.

Entendendo uma API RESTful

Uma API RESTful é uma interface de programação de aplicações que segue os princípios da arquitetura REST. REST é um acrônimo para Representational State Transfer, que é um estilo de arquitetura de software que define um conjunto de restrições para a criação de serviços web. Uma API RESTful permite que diferentes sistemas se comuniquem entre si por meio de requisições HTTP, que são de nosso forte interesse quando desenvolvemos com Flask.

Por que usar o Flask?

Um dos principais usos do Flask é a criação de APIs RESTful, que são muito úteis para a comunicação entre sistemas e serviço a clientes de um determinado sistema. Além de auxiliar na sintaxe para pessoas que já estão acostumadas a desenvolver em Python, há possibilidade direta de extensão do Flask com outras bibliotecas que possam interessar o desenvolvedor.

Uma das ferramentas alternativas ao Flask é o Django, que é um framework web completo e que possui muitas funcionalidades prontas para uso. No entanto, o Django é mais pesado e possui uma curva de aprendizado maior que o Flask. O Flask é mais indicado para pequenas aplicações e prototipagem rápida, enquanto o Django é mais indicado para aplicações maiores e mais complexas.

Digamos que você deseja criar um sistema de gerenciamento de tarefas. Você pode criar um sistema web com o Flask que permita a criação, edição e exclusão de tarefas. Além disso, você pode criar uma API RESTful para que outros sistemas possam se comunicar com o seu sistema de gerenciamento de tarefas. Essa é apenas uma das possíveis demonstrações do uso desse microframework.

Instalando o Flask

Para instalar o Flask, você pode utilizar o pip, que é o gerenciador de pacotes do Python. Supomos que você já esteja levemente situado com o desenvolvimento em Python e inclusão de pacotes, mas incluiremos aqui o passo a passo simples. Para isso, basta executar o seguinte comando no seu terminal: pip install flask Uma vez instalado, podemos abrir uma instância do interpretador Python e verificar se o Flask foi instalado corretamente. Para isso, basta executar o seguinte comando: python -m flask --version A versão do Flask instalada deverá ser exibida no terminal.

Primeira aplicação com Flask

Para criar a nossa primeira aplicação com Flask, vamos (dentro de um diretório no computador) criar um arquivo chamado app.py e através do seu editor de texto favorito, adicionar o seguinte código:

        <code>
          from flask import Flask
          app = Flask(__name__)
  
          @app.route('/')
          def hello_world():
              return 'Hello, World!'
  
          if __name__ == "__main__":
              app.run()
        </code>
    

Para executar a aplicação, basta executar o seguinte comando no terminal: python app.py. A aplicação estará, por padrão, disponível em http://localhost:5000/.

Entendendo o código fonte

O código acima é uma aplicação simples que cria paralelamente uma instância do Flask e define uma rota para a URL raiz do servidor. Ou seja, enquanto o aplicativo estiver rodando, a rota raiz, especificada em @app.route('/'), obedecerá e retornará ao usuário solicitante o que vier dentro da função em seguida. Quando o usuário acessar a URL raiz, portanto, a função hello_world será executada e retornará a string "Hello, World!".

Criando outras rotas

Para aplicações reais, é realista e muito conveniente ter mais de uma rota funcionando para nosso servidor em Flask, e é isso que faremos a seguir. Seguindo o exemplo do aplicativo para gerenciamento de tarefas, vamos criar duas rotas principais, uma para a obtenção de tarefas e outra para a criação de tarefas. Para isso, vamos adicionar o seguinte código ao nosso arquivo app.py:

        <code>
            @app.route('/tasks')
            def get_tasks():
                return 'Tasks page'
    
            @app.route('/tasks/create')
            def create_task():
                return 'Create task page'
    
            if __name__ == "__main__":
                app.run()
        </code>
    

Agora, ao acessar as URLs http://localhost:5000/tasks e http://localhost:5000/tasks/create no navegador, o usuário verá as mensagens "Tasks page" e "Create task page", respectivamente. Obviamente, podemos generalizar esse tipo de ação orientado a rotas para qualquer tipo de aplicação que desejamos criar. Para propósitos mais específicos, podemos sempre adicionar mais rotas, ou mesmo devolver páginas HTML ao invés de strings simples.

Principais requisições HTTP

Para entender um pouco mais a fundo o funcionamento de uma API RESTful construída com Flask, é importante entender as principais requisições HTTP que podem ser feitas para um servidor. Veja que nas requisições que construímos acima (com as rotas /tasks e /tasks/create), estamos fazendo requisições do tipo GET, que é a requisição mais comum e que é utilizada para obter informações de um servidor.

Requisição GET

A requisição GET é utilizada para obter informações de um servidor. Quando você acessa uma página web, por exemplo, o navegador faz uma requisição GET para o servidor para obter o conteúdo da página. No Flask, podemos utilizar a função request.args para obter os parâmetros passados na URL. Por exemplo, se quisermos obter o parâmetro id da URL /tasks?id=1, podemos fazer o seguinte:

        <code>
            @app.route('/tasks')
            def get_tasks():
                task_id = request.args.get('id')
                return f'Task id: {task_id}'
        </code>
    

Dessa forma, podemos saber se o usuário está solicitando uma tarefa específica no nosso cenário. A requisição GET é muito útil para obter informações de um servidor, mas não é recomendada para enviar informações confidenciais ou sensíveis, pois os parâmetros são visíveis na URL. Para uma melhor segurança e para enviar informações sensíveis, é recomendado utilizar a requisição POST.

Requisição POST

A requisição POST é utilizada para enviar informações a um servidor. Por exemplo, quando você preenche um formulário em um site e clica no botão de enviar, o navegador faz uma requisição POST para enviar as informações preenchidas no formulário para o servidor. No Flask, podemos utilizar a função request.form para obter os dados enviados na requisição POST. Por exemplo, se quisermos criar uma tarefa com um nome e uma descrição, podemos fazer o seguinte:

        <code>
            @app.route('/tasks/create', methods=['POST'])
            def create_task():
                name = request.form.get('name')
                description = request.form.get('description')
                return f'Task created: {name}, {description}'
        </code>
    

Dessa forma, podemos criar uma tarefa com um nome e uma descrição e posteriormente salvá-la na ferramenta de banco de dados utilizada no projeto em específico (digamos que seu banco de dados está diretamente atrelado ao seu código em Python, essa manipulação mais direta é muito conveniente!).

A requisição POST é muito útil para enviar informações sensíveis para um servidor, pois os dados enviados não são visíveis na URL. No entanto, é importante lembrar que a requisição POST não é segura por si só, e é recomendado utilizar HTTPS para criptografar os dados enviados na requisição POST.

Conclusões

Neste tutorial, vimos o que é o Flask e como ele auxilia no desenvolvimento de sistemas de software, com foco na Web. Vimos também o que é uma API RESTful e como o Flask pode ser utilizado para criar APIs RESTful. Vimos como instalar o Flask e como criar a nossa primeira aplicação com Flask utilizando requisições simples em HTTP.

Para uma visão mais aprofundada sobre o Flask e todas suas utilidades detalhadas, recomendo a leitura da documentação oficial do Flask.