{"id":10074,"date":"2023-07-18T15:38:04","date_gmt":"2023-07-18T18:38:04","guid":{"rendered":"https:\/\/www.homehost.com.br\/blog\/?p=10074"},"modified":"2024-06-29T19:13:59","modified_gmt":"2024-06-29T22:13:59","slug":"flask-python","status":"publish","type":"post","link":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/","title":{"rendered":"Flask Python: como usar e qual sua fun\u00e7\u00e3o?"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python-1024x512.png\" alt=\"python flask\" class=\"wp-image-10078\" width=\"1024\" height=\"512\" srcset=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python-1024x512.png 1024w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python-300x150.png 300w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python-768x384.png 768w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png 1260w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Flask Python \u00e9 uma alternativa gratuita e vers\u00e1til na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos.<\/strong> Por ser bastante simples, acaba se tornando a melhor escolha mesmo para programadores que n\u00e3o t\u00eam tanto conhecimento nessa linguagem espec\u00edfica.<\/p>\n\n\n\n<p>A variedade de cria\u00e7\u00e3o \u00e9 bastante ampla, por isso, fornece liberdade ao programador para trabalhar com o design da sua aplica\u00e7\u00e3o fora do Flask, sem comprometer seu funcionamento.<\/p>\n\n\n\n<p>Nesse artigo voc\u00ea ir\u00e1 lidar com exemplos pr\u00e1ticos e formas de usar o Flask nas suas cria\u00e7\u00f5es.<\/p>\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_72 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Conte\u00fado<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#O_que_e_o_Flask_Python\" title=\"O que \u00e9 o Flask Python?\">O que \u00e9 o Flask Python?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Padrao_MVC\" title=\"Padr\u00e3o MVC\">Padr\u00e3o MVC<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Rotas_e_templates\" title=\"Rotas e templates\">Rotas e templates<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Por_que_usar_o_Flask_Python\" title=\"Por que usar o Flask Python?\">Por que usar o Flask Python?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Como_instalar_e_usar_o_Flask_Python\" title=\"Como instalar e usar o Flask Python?\">Como instalar e usar o Flask Python?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Criar_um_aplicativo_Flask_simples_exemplos_praticos\" title=\"Criar um aplicativo Flask simples: exemplos pr\u00e1ticos\">Criar um aplicativo Flask simples: exemplos pr\u00e1ticos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Aplicacao_com_3_rotas_e_padrao_REST_GET_POST_PUT_DELETE\" title=\"Aplica\u00e7\u00e3o com 3 rotas e padr\u00e3o REST (GET, POST, PUT, DELETE)\">Aplica\u00e7\u00e3o com 3 rotas e padr\u00e3o REST (GET, POST, PUT, DELETE)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Usar_rotas_no_Flask\" title=\"Usar rotas no Flask\">Usar rotas no Flask<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Exemplo_de_como_usar_rotas_no_Flask\" title=\"Exemplo de como usar rotas no Flask\">Exemplo de como usar rotas no Flask<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Usar_templates_no_Flask_Python\" title=\"Usar templates no Flask Python\">Usar templates no Flask Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Banco_de_dados_em_Flask_Python\" title=\"Banco de dados em Flask Python\">Banco de dados em Flask Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Testar_aplicativos_Flask\" title=\"Testar aplicativos Flask\">Testar aplicativos Flask<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Alternativas_ao_Flask_Python\" title=\"Alternativas ao Flask Python\">Alternativas ao Flask Python<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Django\" title=\"Django\">Django<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Pyramid\" title=\"Pyramid\">Pyramid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Bottle\" title=\"Bottle\">Bottle<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#Conclusao\" title=\"Conclus\u00e3o\">Conclus\u00e3o<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"O_que_e_o_Flask_Python\"><\/span>O que \u00e9 o Flask Python?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>A sua defini\u00e7\u00e3o \u00e9 de um <strong>framework leve para desenvolvimento web em Python<\/strong>. Ele \u00e9 projetado para ser simples e f\u00e1cil de usar, enquanto fornece flexibilidade e extensibilidade para criar aplicativos web.&nbsp;<\/p>\n\n\n\n<p>Tamb\u00e9m considerado um microframework, o que significa que ele n\u00e3o possui um conjunto de ferramentas ou bibliotecas espec\u00edficas para tarefas como autentica\u00e7\u00e3o de usu\u00e1rio ou manipula\u00e7\u00e3o de formul\u00e1rios.&nbsp;<\/p>\n\n\n\n<p>Ainda assim, o Flask \u00e9 altamente modular e permite que voc\u00ea escolha as extens\u00f5es adequadas para adicionar funcionalidades espec\u00edficas ao seu aplicativo.<\/p>\n\n\n\n<p>\u00c9 poss\u00edvel criar aplicativos web de forma r\u00e1pida e eficiente, desde pequenas aplica\u00e7\u00f5es at\u00e9 sistemas mais complexos.&nbsp;<\/p>\n\n\n\n<p>Ele segue o padr\u00e3o MVC (Model-View-Controller), que seria um padr\u00e3o de arquitetura de software que separa uma aplica\u00e7\u00e3o web em tr\u00eas partes principais:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Model:<\/strong> o modelo \u00e9 respons\u00e1vel por gerenciar os dados da aplica\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>View:<\/strong> a visualiza\u00e7\u00e3o \u00e9 respons\u00e1vel por renderizar a interface do usu\u00e1rio da aplica\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Controller:<\/strong> o controlador \u00e9 respons\u00e1vel por receber as entradas do usu\u00e1rio e atualizar o modelo e a visualiza\u00e7\u00e3o de acordo.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Padrao_MVC\"><\/span>Padr\u00e3o MVC<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>O padr\u00e3o MVC \u00e9 uma abordagem popular para o desenvolvimento porque \u00e9 f\u00e1cil de entender e usar, tal qual o Flesk em si.<\/p>\n\n\n\n<p>Observe esse padr\u00e3o numa aplica\u00e7\u00e3o que exibe <a href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/lista-python\/\">lista<\/a> de produtos, para compreender o c\u00f3digo na pr\u00e1tica:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Modelo\nclass Produto(object):\n    def __init__(self, id, nome, preco):\n        self.id = id\n        self.nome = nome\n        self.preco = preco\n\n# Lista de modelo\nclass ProdutoModelo(object):\n    def obter_produto(self, id):\n        # Implementa\u00e7\u00e3o simulada para retornar o produto com base no ID\n        produtos = {\n            1: Produto(1, 'Produto 1', 100.0),\n            2: Produto(2, 'Produto 2', 150.0),\n            3: Produto(3, 'Produto 3', 200.0)\n        }\n        return produtos.get(id)\n\n# View\nclass VisualizacaoProduto(object):\n    def __init__(self, produto):\n        self.produto = produto\n\n    def renderizar(self):\n        return \"\"\"\n        &lt;html&gt;\n        &lt;head&gt;\n        &lt;title&gt;Produto&lt;\/title&gt;\n        &lt;\/head&gt;\n        &lt;body&gt;\n        &lt;h1&gt;Produto&lt;\/h1&gt;\n        &lt;p&gt;Nome: {nome}&lt;\/p&gt;\n        &lt;p&gt;Pre\u00e7o: {preco}&lt;\/p&gt;\n        &lt;\/body&gt;\n        &lt;\/html&gt;\n        \"\"\".format(nome=self.produto.nome, preco=self.produto.preco)\n\n# Controlador\nclass ControladorProduto(object):\n    def __init__(self, modelo, visao):\n        self.modelo = modelo\n        self.visao = visao\n\n    def obter_produto(self, id):\n        produto = self.modelo.obter_produto(id)\n        self.visao.produto = produto\n        print(self.visao.renderizar())\n\n# Fun\u00e7\u00e3o principal\nif __name__ == \"__main__\":\n    modelo = ProdutoModelo()\n\n    # Criando um objeto Produto com ID 1 para visualiza\u00e7\u00e3o\n    for produto_id in range(1, 4):  # Assuming there are products with IDs 1, 2, and 3\n        produto = modelo.obter_produto(produto_id)\n\n        visao = VisualizacaoProduto(produto)  # Passando o objeto Produto como argumento\n        controlador = ControladorProduto(modelo, visao)\n\n        controlador.obter_produto(produto_id)<\/code><\/pre>\n\n\n\n<p>Sa\u00edda:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/imagem_2023-07-18_113101824.png\" alt=\"\" class=\"wp-image-10087\" width=\"293\" height=\"658\" srcset=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/imagem_2023-07-18_113101824.png 293w, https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/imagem_2023-07-18_113101824-134x300.png 134w\" sizes=\"(max-width: 293px) 100vw, 293px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Rotas_e_templates\"><\/span>Rotas e templates<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>O Flask oferece um mecanismo de roteamento para direcionar as solicita\u00e7\u00f5es do usu\u00e1rio para fun\u00e7\u00f5es espec\u00edficas, chamadas de <strong>&#8220;rotas&#8221;<\/strong>. Essas rotas s\u00e3o definidas de forma simples usando decoradores para mapear URLs a fun\u00e7\u00f5es no c\u00f3digo.<\/p>\n\n\n\n<p>Al\u00e9m disso, o Flask possui suporte embutido para renderizar templates <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/o-que-e-html\/\">HTML<\/a>, permitindo a cria\u00e7\u00e3o de p\u00e1ginas web din\u00e2micas. Isso facilita a separa\u00e7\u00e3o da l\u00f3gica de neg\u00f3cios do design da interface do usu\u00e1rio.<\/p>\n\n\n\n<p>Por esses e outros motivos, muitos desenvolvedores apreciam a sua abordagem minimalista, que permite construir aplicativos web de forma mais direta e personalizada. <\/p>\n\n\n\n<p>\u00c9 comum compar\u00e1-lo a outros frameworks, como <a href=\"https:\/\/www.homehost.com.br\/hospedagem-django\/\">Django<\/a>, por exemplo, que tem mais recursos integrados e uma abordagem mais ampla.<\/p>\n\n\n\n<p>Ainda assim, o Flask \u00e9 especialmente adequado para projetos menores, como aplicativos web mais simples e <strong>APIs RESTful.<\/strong> <\/p>\n\n\n\n<p>Dessa forma, \u00e9 apreciado por desenvolvedores que desejam ter mais controle sobre o processo de desenvolvimento web, optando por componentes espec\u00edficos conforme necess\u00e1rio, em vez de uma estrutura mais robusta e completa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Por_que_usar_o_Flask_Python\"><\/span>Por que usar o Flask Python?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Daremos 7 motivos v\u00e1lidos para usar Flask na cria\u00e7\u00e3o de seus aplicativos:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ele \u00e9 um <strong>microframework <\/strong>web <strong>gratuito <\/strong>e de c\u00f3digo aberto, utilizado por empresas de todos os tamanhos, isso significa que consegue abranger diversas necessidades;<\/li>\n\n\n\n<li>O Flask \u00e9 conhecido por sua <strong>leveza e flexibilidade<\/strong>, permitindo criar uma ampla gama de aplicativos web;<\/li>\n\n\n\n<li>Ele \u00e9 leve e r\u00e1pido, executando facilmente em servidores com recursos limitados;<\/li>\n\n\n\n<li>\u00c9 f\u00e1cil de aprender e usar, com uma sintaxe simples e intuitiva, adequada mesmo para desenvolvedores n\u00e3o familiarizados com <a href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/o-que-e-python\/\">Python<\/a>;<\/li>\n\n\n\n<li>A grande comunidade de usu\u00e1rios e desenvolvedores do Flask tem recursos preciosos para aprender e usar sua estrutura;<\/li>\n\n\n\n<li>O Flask difere de outras aplica\u00e7\u00f5es por ser um microframework que oferece apenas as funcionalidades b\u00e1sicas, permitindo maior controle sobre o design do aplicativo;<\/li>\n\n\n\n<li>Recursos adicionais, como tutoriais, documenta\u00e7\u00e3o e f\u00f3runs de discuss\u00e3o para suporte no uso do Flask, todos criados pela ampla comunidade.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Como_instalar_e_usar_o_Flask_Python\"><\/span>Como instalar e usar o Flask Python?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Comece com a <strong>instala\u00e7\u00e3o do Python<\/strong>, atrav\u00e9s do site oficial e segundo o sistema operacional em que ir\u00e1 trabalhar. Usando um terminal, digite o comando abaixo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ pip install Flask<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criar_um_aplicativo_Flask_simples_exemplos_praticos\"><\/span>Criar um aplicativo Flask simples: exemplos pr\u00e1ticos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Para ilustrar como uma API se parece em Flask, usamos o c\u00f3digo abaixo (aplica\u00e7\u00e3o m\u00ednima):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask\n\napp = Flask(__name__)\n\n@app.route(\"\/\")\ndef hello_world():\n    return \"&lt;p&gt;Hello, World!&lt;\/p&gt;\"<\/code><\/pre>\n\n\n\n<p>O decorator <code><strong>@app.route(\"\/\")<\/strong><\/code> \u00e9 usado para decorar a estrutura de outras classes e fun\u00e7\u00f5es. Assim, ele injeta a fun\u00e7\u00e3o que inicializa um socket de comunica\u00e7\u00e3o, seguindo o padr\u00e3o <strong>REST<\/strong>, quando o argumento da rota \u00e9 passado.<\/p>\n\n\n\n<p>Primeiramente, importamos a classe Flask, que servir\u00e1 como a base do nosso <strong>aplicativo WSGI<\/strong>.<\/p>\n\n\n\n<p>Em seguida, criamos uma inst\u00e2ncia dessa classe, passando o nome do m\u00f3dulo ou pacote do aplicativo como argumento. \u00c9 uma pr\u00e1tica comum usar <strong><code>\"name\"<\/code><\/strong> para isso, permitindo que o Flask localize recursos importantes, como modelos e arquivos est\u00e1ticos.<\/p>\n\n\n\n<p>Ent\u00e3o, utilizamos o decorador <strong><code>\"route()\"<\/code><\/strong> para informar ao Flask qual URL deve acionar a fun\u00e7\u00e3o que definiremos.<\/p>\n\n\n\n<p>A fun\u00e7\u00e3o em quest\u00e3o retorna a mensagem que desejamos exibir no navegador do usu\u00e1rio. O navegador renderiza o HTML contido na <strong><a href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/string-python\/\">string<\/a><\/strong>, pois o tipo de conte\u00fado \u00e9 HTML por padr\u00e3o.<\/p>\n\n\n\n<p>\u00c9 fundamental salvar esse arquivo com o nome <strong><code>\"hello.py\"<\/code><\/strong> ou algo semelhante, evitando assim cham\u00e1-lo de <strong><code>\"flask.py\"<\/code><\/strong>, pois isso entraria em conflito com o pr\u00f3prio Flask.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Aplicacao_com_3_rotas_e_padrao_REST_GET_POST_PUT_DELETE\"><\/span>Aplica\u00e7\u00e3o com 3 rotas e padr\u00e3o REST (GET, POST, PUT, DELETE)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, jsonify, request\n\napp = Flask(__name__)\n\n# Dados de exemplo (simulando um banco de dados)\nbooks = &#091;\n    {\n        'id': 1,\n        'title': 'Livro 1',\n        'author': 'Autor 1'\n    },\n    {\n        'id': 2,\n        'title': 'Livro 2',\n        'author': 'Autor 2'\n    }\n]\n\n# Rota para listar todos os livros (GET)\n@app.route('\/books', methods=&#091;'GET'])\ndef get_books():\n    return jsonify(books)\n\n# Rota para obter detalhes de um livro espec\u00edfico (GET)\n@app.route('\/books\/&lt;int:book_id&gt;', methods=&#091;'GET'])\ndef get_book(book_id):\n    book = next((book for book in books if book&#091;'id'] == book_id), None)\n    if book:\n        return jsonify(book)\n    else:\n        return jsonify({'message': 'Livro n\u00e3o encontrado'}), 404\n\n# Rota para adicionar um novo livro (POST)\n@app.route('\/books', methods=&#091;'POST'])\ndef add_book():\n    new_book = {\n        'id': len(books) + 1,\n        'title': request.json&#091;'title'],\n        'author': request.json&#091;'author']\n    }\n    books.append(new_book)\n    return jsonify(new_book), 201\n\n# Rota para atualizar os detalhes de um livro existente (PUT)\n@app.route('\/books\/&lt;int:book_id&gt;', methods=&#091;'PUT'])\ndef update_book(book_id):\n    book = next((book for book in books if book&#091;'id'] == book_id), None)\n    if book:\n        book&#091;'title'] = request.json&#091;'title']\n        book&#091;'author'] = request.json&#091;'author']\n        return jsonify(book)\n    else:\n        return jsonify({'message': 'Livro n\u00e3o encontrado'}), 404\n\n# Rota para excluir um livro (DELETE)\n@app.route('\/books\/&lt;int:book_id&gt;', methods=&#091;'DELETE'])\ndef delete_book(book_id):\n    book = next((book for book in books if book&#091;'id'] == book_id), None)\n    if book:\n        books.remove(book)\n        return jsonify({'message': 'Livro exclu\u00eddo'})\n    else:\n        return jsonify({'message': 'Livro n\u00e3o encontrado'}), 404\n\nif __name__ == '__main__':\n    app.run()<\/code><\/pre>\n\n\n\n<p>Neste exemplo, utilizamos uma lista de livros como dados de exemplo. <strong>As rotas &#8220;\/books&#8221; nos permitem obter uma lista de todos os livros e adicionar um novo livro. <\/strong>A rota <strong><code>\"\/books\/\"<\/code><\/strong> permite que os usu\u00e1rios obtenham detalhes de um livro espec\u00edfico, atualizem os detalhes desse livro e excluam o livro. Mapeamos os m\u00e9todos <strong>REST<\/strong> para cada rota, permitindo a execu\u00e7\u00e3o das opera\u00e7\u00f5es <strong>CRUD<\/strong> correspondentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Usar_rotas_no_Flask\"><\/span>Usar rotas no Flask<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>O Flask define as rotas usando o decorador <code><strong>@app.route()<\/strong><\/code>. Assim, o decorador associa uma fun\u00e7\u00e3o a uma URL espec\u00edfica, permitindo que o Flask saiba qual fun\u00e7\u00e3o ser\u00e1 chamada quando uma determinada URL for acessada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemplo_de_como_usar_rotas_no_Flask\"><\/span>Exemplo de como usar rotas no Flask<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask\n\napp = Flask(__name__)\n\n# Rota inicial\n@app.route('\/')\ndef index():\n    return 'P\u00e1gina inicial'\n\n# Rota para a p\u00e1gina \"Sobre\"\n@app.route('\/sobre')\ndef about():\n    return 'Esta \u00e9 a p\u00e1gina Sobre'\n\n# Rota din\u00e2mica com par\u00e2metro\n@app.route('\/usuario\/&lt;nome&gt;')\ndef user(nome):\n    return f'Ol\u00e1, {nome}! Bem-vindo(a) \u00e0 sua p\u00e1gina de usu\u00e1rio.'\n\nif __name__ == '__main__':\n    app.run()\n<\/code><\/pre>\n\n\n\n<p>Temos tr\u00eas rotas diferentes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Rota inicial (&#8220;\/&#8221;):<\/strong> A fun\u00e7\u00e3o <code><strong>index()<\/strong><\/code> ser\u00e1 chamada quando a raiz do aplicativo for acessada. Ela retorna a string &#8220;P\u00e1gina inicial&#8221;.<\/li>\n\n\n\n<li><strong>Rota &#8220;\/sobre&#8221;:<\/strong> A fun\u00e7\u00e3o <code><strong>about()<\/strong><\/code> ser\u00e1 chamada quando a <strong>URL &#8220;\/sobre&#8221;<\/strong> for acessada. Ela retorna a string &#8220;Esta \u00e9 a p\u00e1gina Sobre&#8221;.<\/li>\n\n\n\n<li><strong>Rota din\u00e2mica com par\u00e2metro (&#8220;\/usuario\/&lt;nome&gt;&#8221;): <\/strong>A fun\u00e7\u00e3o <code><strong>user(nome)<\/strong><\/code> ser\u00e1 chamada quando a URL <strong>&#8220;\/usuario\/&lt;nome&gt;&#8221;<\/strong> for acessada, onde <code><strong>&lt;nome&gt;<\/strong><\/code> \u00e9 um par\u00e2metro vari\u00e1vel passado na URL. Ela retorna uma mensagem personalizada com o nome fornecido na URL.<\/li>\n<\/ol>\n\n\n\n<p>Quando voc\u00ea executa o aplicativo Flask, ele acessa as diferentes rotas em um navegador ou por meio de solicita\u00e7\u00f5es HTTP e executa a fun\u00e7\u00e3o correspondente para retornar a resposta adequada.<\/p>\n\n\n\n<p>Ainda assim, \u00e9 importante lembrar de importar a classe <code>Flask<\/code> do m\u00f3dulo <code>flask<\/code> e inicializar o aplicativo Flask chamando <code><strong>app.run()<\/strong><\/code> no final do c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Usar_templates_no_Flask_Python\"><\/span>Usar templates no Flask Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u00c9 poss\u00edvel usar templates para renderizar p\u00e1ginas HTML de dinamicamente. Para isso, voc\u00ea precisa seguir os seguintes passos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crie uma pasta chamada <code><strong>templates<\/strong><\/code> no diret\u00f3rio raiz do seu projeto Flask.<\/li>\n\n\n\n<li>Na pasta <code><strong>templates<\/strong><\/code>, crie um arquivo HTML para o template desejado. Por exemplo, crie um arquivo chamado <code><strong><a href=\"https:\/\/www.homehost.com.br\/blog\/criar-sites\/criar-arquivo-index-html\/\">index.html<\/a><\/strong><\/code> com o seguinte conte\u00fado:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;Meu Site&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;{{ titulo }}&lt;\/h1&gt;\n    &lt;p&gt;Bem-vindo(a) ao meu site!&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No seu arquivo Python do Flask, importe a classe <code>render_template<\/code> do m\u00f3dulo <code>flask<\/code>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, render_template\n\napp = Flask(__name__)\n\n# Rota inicial\n@app.route('\/')\ndef index():\n    titulo = \"P\u00e1gina Inicial\"\n    return render_template('index.html', titulo=titulo)\n\nif __name__ == '__main__':\n    app.run()\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>No exemplo acima, a fun\u00e7\u00e3o <code>index()<\/code> retorna o resultado de <code>render_template()<\/code>, que renderiza o template <code>index.html<\/code>. A fun\u00e7\u00e3o <code>render_template()<\/code> aceita dois argumentos: o nome do arquivo do template e quaisquer vari\u00e1veis que voc\u00ea deseja passar para o template.<\/li>\n\n\n<li>No template, voc\u00ea pode usar <code>{{ variavel }}<\/code> para exibir o valor das vari\u00e1veis passadas pelo Flask. No exemplo acima, a vari\u00e1vel <code>titulo<\/code> \u00e9 passada para o template e exibida no elemento <code>&lt;h1&gt;<\/code>.<\/li>\n\n\n<li>Ao executar o aplicativo, o Flask renderiza o template com os valores das vari\u00e1veis passadas. Dessa forma, a p\u00e1gina HTML resultante fica vis\u00edvel no navegador.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Banco_de_dados_em_Flask_Python\"><\/span>Banco de dados em Flask Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Voc\u00ea pode incorporar uma biblioteca de acesso a banco de dados, como o SQLAlchemy, que \u00e9 um ORM (Object-Relational Mapping) muito usado e bastante poderoso. <\/p>\n\n\n\n<p>A seguir, explicaremos como usar um banco de dados no Flask com o SQLAlchemy:<\/p>\n\n\n\n<p>Instale o SQLAlchemy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Para incorporar o <a href=\"https:\/\/www.sqlalchemy.org\/\">SQLAlchemy<\/a>, execute o seguinte comando: <code><strong>pip install flask-sqlalchemy<\/strong><\/code><\/li>\n<\/ul>\n\n\n\n<p>Configure o Banco de Dados:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No arquivo Python do Flask, importe as classes <code>Flask<\/code> e <code>SQLAlchemy<\/code> do m\u00f3dulo <code>flask<\/code>.<\/li>\n\n\n\n<li>Defina a URL de conex\u00e3o do banco de dados. Por exemplo, para utilizar o SQLite, voc\u00ea pode configurar a URL como <strong><code>sqlite:\/\/\/nome_do_banco_de_dados.db<\/code>.<\/strong><\/li>\n\n\n\n<li>Inicialize o objeto SQLAlchemy passando o aplicativo Flask e a URL do banco de dados.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask\nfrom flask_sqlalchemy import SQLAlchemy\n\napp = Flask(__name__)\napp.config&#091;'SQLALCHEMY_DATABASE_URI'] = 'sqlite:\/\/\/mydatabase.db'\ndb = SQLAlchemy(app)\n\n# Defina os modelos (tabelas)\nclass User(db.Model):\n    id = db.Column(db.Integer, primary_key=True)\n    name = db.Column(db.String(50), nullable=False)\n\n# Rota inicial\n@app.route('\/')\ndef index():\n    # Exemplo de consulta ao banco de dados\n    users = User.query.all()\n    return f'Total de usu\u00e1rios: {len(users)}'\n\nif __name__ == '__main__':\n    app.run()<\/code><\/pre>\n\n\n\n<p>Defina os Modelos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defina as tabelas do banco de dados como classes, herdando da classe <code>db.Model<\/code> do SQLAlchemy.<\/li>\n\n\n\n<li>Adicione atributos \u00e0s classes para representar as colunas da tabela, usando as classes <code>db.Column<\/code> e os tipos de dados correspondentes.<\/li>\n\n\n\n<li>Voc\u00ea pode definir relacionamentos, \u00edndices, restri\u00e7\u00f5es e outros detalhes conforme necess\u00e1rio.<\/li>\n<\/ul>\n\n\n\n<p>Interaja com o Banco de Dados:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utilize as opera\u00e7\u00f5es CRUD (Create, Read, Update, Delete) para interagir com o banco de dados.<\/li>\n\n\n\n<li>Por exemplo, para criar um novo usu\u00e1rio, voc\u00ea pode instanciar um objeto da classe <code>User<\/code>, definir os atributos e adicion\u00e1-lo ao banco de dados usando <code><strong>db.session.add(user)<\/strong><\/code>.<\/li>\n\n\n\n<li>Para consultar registros, voc\u00ea pode usar m\u00e9todos como <code><strong>query.all()<\/strong><\/code> para obter todos os registros de uma tabela.<\/li>\n<\/ul>\n\n\n\n<p>\u00c9 essencial lembrar que o exemplo acima utiliza o SQLite como <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/o-que-e-um-banco-de-dados\/\">banco de dados<\/a>. No entanto, o SQLAlchemy oferece suporte a outros bancos de dados, como <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/mysql\/o-que-e-mysql\/\">MySQL<\/a>, <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/como-instalar-o-postgresql-e-phppgadmin-no-docker\/\">PostgreSQL<\/a>, Oracle, entre outros. A URL de conex\u00e3o e algumas configura\u00e7\u00f5es podem variar dependendo do banco de dados escolhido.<\/p>\n\n\n\n<p><strong>Al\u00e9m disso, \u00e9 necess\u00e1rio criar o banco de dados antes de executar o aplicativo Flask.<\/strong> Isso pode ser feito usando o comando <code><strong>db.create_all()<\/strong><\/code> ou migrando o esquema do banco de dados com o aux\u00edlio das migra\u00e7\u00f5es do SQLAlchemy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Testar_aplicativos_Flask\"><\/span>Testar aplicativos Flask<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Para iniciar um script Flask, voc\u00ea pode usar o seguinte comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flask run<\/code><\/pre>\n\n\n\n<p>Certifique-se de estar no diret\u00f3rio raiz do projeto Flask, que cont\u00e9m o arquivo Python principal do aplicativo (normalmente chamado de <code>app.py<\/code> ou <code>main.py<\/code>). Executando o comando <code>flask run<\/code>, o servidor de desenvolvimento embutido do Flask ser\u00e1 iniciado, permitindo que voc\u00ea acesse o aplicativo <strong>Flask em <code>http:\/\/localhost:5000<\/code>.<\/strong><\/p>\n\n\n\n<p>Para testar todas as rotas usando o <code>curl<\/code>, voc\u00ea pode utilizar o seguinte comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>curl -iX GET http:\/\/localhost:5000\/<\/strong><\/code><\/pre>\n\n\n\n<p>Esse comando enviar\u00e1 uma solicita\u00e7\u00e3o GET para a rota raiz (<code>\/<\/code>) do aplicativo Flask. \u00c9 poss\u00edvel substituir <code>\/<\/code> por qualquer outra rota que voc\u00ea queira testar. O par\u00e2metro <code>-i<\/code> incluir\u00e1 os cabe\u00e7alhos da resposta no resultado e o par\u00e2metro <code>-X<\/code> especificar\u00e1 o m\u00e9todo da solicita\u00e7\u00e3o (neste caso, GET). Tamb\u00e9m \u00e9 poss\u00edvel utilizar outros m\u00e9todos <a href=\"https:\/\/www.homehost.com.br\/blog\/internet\/o-que-e-http\/\">HTTP<\/a>, como POST, PUT e DELETE, dependendo da rota que est\u00e1 sendo testada.<\/p>\n\n\n\n<p><strong>Lembrando que \u00e9 importante ajustar a porta (neste exemplo, <code>5000<\/code>) se voc\u00ea tiver definido uma porta diferente para o seu aplicativo Flask.<\/strong><\/p>\n\n\n\n<p>\u00c9 poss\u00edvel executar comandos <code>curl<\/code> adicionais para testar outras rotas, substituindo a URL e o m\u00e9todo da solicita\u00e7\u00e3o conforme as rotas do seu aplicativo Flask.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Alternativas_ao_Flask_Python\"><\/span>Alternativas ao Flask Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Django\"><\/span>Django<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u00c9 um framework web completo escrito em Python. Ele \u00e9 mais complexo do que o Flask, mas tamb\u00e9m oferece mais recursos. Django \u00e9 uma boa escolha para o desenvolvimento de aplicativos web de grande porte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Pyramid\"><\/span>Pyramid<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><a href=\"https:\/\/trypyramid.com\/\">Pyramid<\/a> \u00e9 um framework web completo escrito em Python. Ele \u00e9 semelhante ao Django em termos de recursos e complexidade. Assim, o Pyramid \u00e9 uma boa escolha para o desenvolvimento de aplicativos web de qualquer porte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Bottle\"><\/span>Bottle<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u00c9 um microframework web min\u00fasculo escrito em Python. Ele \u00e9 ainda menor e mais leve do que o Flask. <a href=\"https:\/\/bottlepy.org\/docs\/dev\/\">Bottle<\/a>, portanto, \u00e9 uma boa escolha para o desenvolvimento de aplicativos web muito simples.<\/p>\n\n\n\n<p>A melhor escolha para voc\u00ea depender\u00e1 de suas necessidades e prefer\u00eancias espec\u00edficas. Se voc\u00ea est\u00e1 procurando um microframework web leve, extens\u00edvel e f\u00e1cil de aprender e usar, o Flask \u00e9 uma \u00f3tima op\u00e7\u00e3o. <\/p>\n\n\n\n<p>Ainda que precise de um framework web mais complexo com mais recursos, Django ou Pyramid podem ser uma melhor escolha. Se voc\u00ea est\u00e1 procurando um microframework web muito simples, Bottle pode ser uma boa op\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusao\"><\/span>Conclus\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Em suma, o Flask oferece flexibilidade para se adaptar a uma ampla gama de projetos, desde aplica\u00e7\u00f5es web simples at\u00e9 aplica\u00e7\u00f5es mais complexas.<\/strong> Ele traz adaptabilidade para desenvolvedores constru\u00edrem desde pequenos projetos at\u00e9 aplica\u00e7\u00f5es mais complexas.<\/p>\n\n\n\n<p>Se voc\u00ea acredita que o Flask n\u00e3o atende \u00e0s suas necessidades espec\u00edficas, existem outras op\u00e7\u00f5es dispon\u00edveis. \u00c9 importante explorar e considerar diferentes frameworks e bibliotecas para encontrar a solu\u00e7\u00e3o que melhor se adapte ao seu prop\u00f3sito.<\/p>\n\n\n\n<p>N\u00f3s fornecemos, no entanto, outras op\u00e7\u00f5es al\u00e9m do Flask, caso voc\u00ea esteja buscando uma alternativa mais adequada para o seu caso de uso. Cada framework tem suas pr\u00f3prias vantagens e caracter\u00edsticas, ent\u00e3o recomendamos pesquisar e explorar as diferentes op\u00e7\u00f5es antes de decidir.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Flask Python \u00e9 uma alternativa gratuita e vers\u00e1til na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos. Por ser bastante simples, acaba se tornando a melhor escolha mesmo para programadores que n\u00e3o t\u00eam tanto conhecimento nessa linguagem espec\u00edfica. A variedade de cria\u00e7\u00e3o \u00e9 bastante ampla, por isso, fornece liberdade ao programador [&hellip;]<\/p>\n","protected":false},"author":31,"featured_media":10078,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_helpful_status":1,"_lmt_disableupdate":"","_lmt_disable":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[211],"tags":[],"class_list":["post-10074","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pythondjango"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Flask Python: como usar e qual sua fun\u00e7\u00e3o? | Homehost<\/title>\n<meta name=\"description\" content=\"Saiba tudo sobre Flask Python: uma alternativa gratuita na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flask Python: como usar e qual sua fun\u00e7\u00e3o? | Homehost\" \/>\n<meta property=\"og:description\" content=\"Saiba tudo sobre Flask Python: uma alternativa gratuita na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Homehost\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Homehost\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-18T18:38:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-29T22:13:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1260\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daiana S\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Homehost\" \/>\n<meta name=\"twitter:site\" content=\"@Homehost\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daiana S\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/\",\"name\":\"Flask Python: como usar e qual sua fun\u00e7\u00e3o? | Homehost\",\"isPartOf\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png\",\"datePublished\":\"2023-07-18T18:38:04+00:00\",\"dateModified\":\"2024-06-29T22:13:59+00:00\",\"author\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/eb90cb369d7098d6d85fa96c78ea1689\"},\"description\":\"Saiba tudo sobre Flask Python: uma alternativa gratuita na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#primaryimage\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png\",\"contentUrl\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png\",\"width\":1260,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/www.homehost.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flask Python: como usar e qual sua fun\u00e7\u00e3o?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#website\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/\",\"name\":\"Homehost\",\"description\":\"Hospedagem De Sites\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/eb90cb369d7098d6d85fa96c78ea1689\",\"name\":\"Daiana S\",\"description\":\"Graduada em Letras pelo Instituto Federal da Para\u00edba e especializada em reda\u00e7\u00e3o geral. Gosto de escrever sobre tudo e me dedico em v\u00e1rios n\u00edveis de expressividade. No geral, todos os meus hobbies giram em torno de escrever alguma coisa e fazer isso bem. Contato: daiana.blog@homehost.com.br\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Flask Python: como usar e qual sua fun\u00e7\u00e3o? | Homehost","description":"Saiba tudo sobre Flask Python: uma alternativa gratuita na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/","og_locale":"pt_BR","og_type":"article","og_title":"Flask Python: como usar e qual sua fun\u00e7\u00e3o? | Homehost","og_description":"Saiba tudo sobre Flask Python: uma alternativa gratuita na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos.","og_url":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/","og_site_name":"Homehost","article_publisher":"https:\/\/www.facebook.com\/Homehost\/","article_published_time":"2023-07-18T18:38:04+00:00","article_modified_time":"2024-06-29T22:13:59+00:00","og_image":[{"width":1260,"height":630,"url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png","type":"image\/png"}],"author":"Daiana S","twitter_card":"summary_large_image","twitter_creator":"@Homehost","twitter_site":"@Homehost","twitter_misc":{"Escrito por":"Daiana S","Est. tempo de leitura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/","url":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/","name":"Flask Python: como usar e qual sua fun\u00e7\u00e3o? | Homehost","isPartOf":{"@id":"https:\/\/www.homehost.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#primaryimage"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png","datePublished":"2023-07-18T18:38:04+00:00","dateModified":"2024-06-29T22:13:59+00:00","author":{"@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/eb90cb369d7098d6d85fa96c78ea1689"},"description":"Saiba tudo sobre Flask Python: uma alternativa gratuita na cria\u00e7\u00e3o de aplica\u00e7\u00f5es WEB que pretendam rodar em servidores com poucos recursos.","breadcrumb":{"@id":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#primaryimage","url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png","contentUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png","width":1260,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.homehost.com.br\/blog\/pythondjango\/flask-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.homehost.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Flask Python: como usar e qual sua fun\u00e7\u00e3o?"}]},{"@type":"WebSite","@id":"https:\/\/www.homehost.com.br\/blog\/#website","url":"https:\/\/www.homehost.com.br\/blog\/","name":"Homehost","description":"Hospedagem De Sites","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/eb90cb369d7098d6d85fa96c78ea1689","name":"Daiana S","description":"Graduada em Letras pelo Instituto Federal da Para\u00edba e especializada em reda\u00e7\u00e3o geral. Gosto de escrever sobre tudo e me dedico em v\u00e1rios n\u00edveis de expressividade. No geral, todos os meus hobbies giram em torno de escrever alguma coisa e fazer isso bem. Contato: daiana.blog@homehost.com.br"}]}},"modified_by":"ad_hmhst","jetpack_featured_media_url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2023\/07\/Flask-Python.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/10074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/users\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=10074"}],"version-history":[{"count":18,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/10074\/revisions"}],"predecessor-version":[{"id":14083,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/10074\/revisions\/14083"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media\/10078"}],"wp:attachment":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=10074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=10074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=10074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}