{"id":7544,"date":"2018-06-06T13:29:53","date_gmt":"2018-06-06T16:29:53","guid":{"rendered":"https:\/\/king.host\/wiki\/?post_type=article&#038;p=7544"},"modified":"2023-11-23T16:31:08","modified_gmt":"2023-11-23T18:31:08","slug":"flask-na-kinghost","status":"publish","type":"article","link":"https:\/\/king.host\/wiki\/artigo\/flask-na-kinghost\/","title":{"rendered":"Como utilizar o Flask na KingHost"},"content":{"rendered":"\n<p>O Flask \u00e9 um Micro-framework Python de f\u00e1cil configura\u00e7\u00e3o baseado em Werkzeud, Jinja 2. Al\u00e9m disso, existe uma \u00f3tima documenta\u00e7\u00e3o dispon\u00edvel e \u00e9 mantido por uma comunidade bastante ativa.<\/p>\n\n\n\n<p><em>Este tutorial \u00e9 direcionado para usu\u00e1rios com conhecimentos t\u00e9cnicos em manipula\u00e7\u00e3o de arquivos via SSH, Python e frameworks.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criar_aplicacao_Python_no_Painel_de_Controle\"><\/span>Criar aplica\u00e7\u00e3o Python no Painel de Controle<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Para iniciar esse tutorial, voc\u00ea j\u00e1 deve estar num servidor com <a href=\"https:\/\/king.host\/hospedagem-de-sites?utm_source=wiki&amp;utm_medium=texto&amp;utm_term=link-hospedagem-de-sites&amp;utm_content=flask-na-kinghost&amp;utm_campaign=oferta-produto\" target=\"_blank\" rel=\"noreferrer noopener\">suporte \u00e0 Python<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-original=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2023\/11\/image-72.png\" alt=\"\" class=\"wp-image-24473\"\/><\/figure><\/div>\n\n\n<p>Para saber se voc\u00ea j\u00e1 possui suporte, acesse seu Painel de Controle da hospedagem, selecione seu dom\u00ednio e v\u00e1 at\u00e9 a sess\u00e3o <strong>Python<\/strong>. Nesta op\u00e7\u00e3o, caso voc\u00ea esteja em um servidor sem suporte, ir\u00e1 exibir a seguinte mensagem:<br>\n<\/p>\n\n\n\n<p>Para habilitar o Python, voc\u00ea precisar\u00e1 <a href=\"https:\/\/king.host\/wiki\/artigo\/como-abrir-um-chamado\/\" target=\"_blank\" rel=\"noopener noreferrer\">abrir um chamado de suporte<\/a>. Fa\u00e7a as seguintes defini\u00e7\u00f5es ao abrir o chamado: <em>Categoria: Migra\u00e7\u00e3o | Subcategoria: Quero trocar de plataforma<\/em>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/flask02.png\"><img decoding=\"async\" data-src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/flask02.png\" alt=\"Criar aplica\u00e7\u00e3o WSGI\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 780px; --smush-placeholder-aspect-ratio: 780\/804;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/flask02.png\" alt=\"Criar aplica\u00e7\u00e3o WSGI\"\/><\/noscript><\/a><\/figure><\/div>\n\n\n<p>Com o WSGI ativado, siga para a cria\u00e7\u00e3o da aplica\u00e7\u00e3o:<br>\nSess\u00e3o Python &gt; Django, defina o nome da app e em Framework selecione <strong>*Outros<\/strong>.<br>\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criando_estrutura_virtualenv_e_instalando_pacotes\"><\/span>Criando estrutura, virtualenv e instalando pacotes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Virtualenv \u00e9 um recurso dispon\u00edvel no python para cria\u00e7\u00e3o de ambientes virtuais que pode ser isolado para cada projeto. Muito \u00fatil quando trabalhamos com duas aplica\u00e7\u00f5es que precisam de vers\u00f5es diferentes do mesmo pacote, por exemplo. Cada uma pode usar um virutalenv \u00fanico e ter suas depend\u00eancias isoladas. Saiba mais: <a href=\"https:\/\/virtualenv.pypa.io\/en\/stable\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/virtualenv.pypa.io\/en\/stable\/<\/a>.<\/p>\n\n\n\n<p>Neste tutorial, foi usada a seguinte vers\u00e3o do Python:<br>\n<kh-terminal><span style=\"color: #808080;\">[testflask@web7697 ~]$<\/span> python -V<br>\nPython 3.6.2<\/kh-terminal><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criando_o_site-packages_e_instalando_o_virtualenv\"><\/span>Criando o site-packages e instalando o virtualenv<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Neste tutorial utilizaremos a pasta &#8220;apps_wsgi\/testflask&#8221; dentro do FTP (mkdir apps_wsig\/testflask&#8221;)<\/p>\n\n\n\n<p>Execute o seguinte comando abaixo para iniciar a instala\u00e7\u00e3o do virtualenv:<\/p>\n\n\n\n<pre>pip install --user virtualenv<\/pre>\n\n\n\n<p>A sa\u00edda deve ser parecida com a seguinte:\n<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">Collecting virtualenv\n  Downloading https:\/\/files.pythonhosted.org\/packages\/6a\/d1\/e0d142ce7b8a5c76adbfad01d853bca84c7c0240e35577498e20bc2ade7d\/virtualenv-16.2.0-py2.py3-none-any.whl (1.9MB)\n    100% |????????????????????????????????| 1.9MB 218kB\/s \nRequirement already satisfied (use --upgrade to upgrade): setuptools&gt;=18.0.0 in \/opt\/python-2.7.10\/lib\/python2.7\/site-packages\/setuptools-20.2.2-py2.7.egg (from virtualenv)\nInstalling collected packages: virtualenv\nSuccessfully installed virtualenv-16.2.0\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criar_o_diretorio_para_a_aplicacao\"><\/span>Criar o diret\u00f3rio para a aplica\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Use o comando abaixo para criar o diret\u00f3rio:<br>\n<kh-terminal>mkdir apps_wsig\/testflask<\/kh-terminal><\/p>\n\n\n\n<p>Vamos criar nosso virtualenv e ativ\u00e1-lo:<br>\n<kh-terminal>virtualenv testflask\/virtual_env<\/kh-terminal><br>\n<em>virtual_env <\/em>\u00e9 o nome do virtualenv, mas voc\u00ea pode utilizar o nome que preferir<\/p>\n\n\n\n<p>A sa\u00edda ser\u00e1 a seguinte:\n<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">New python executable in \/home\/testflask\/.virtualenvs\/testflask.kinghost.net\/bin\/python\nInstalling setuptools, pip, wheel...done.\n<\/pre>\n\n\n\n<p>Na pr\u00f3pria cria\u00e7\u00e3o j\u00e1 s\u00e3o instalados os pacotes padr\u00f5es.<\/p>\n\n\n\n<p>Para ativar o virtualenv, basta digitar\n<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\" lang=\"wp-block-preformatted\">source testflask\/virtual_env\/bin\/activate<\/pre>\n\n\n\n<p>Note que ao ativarmos o ambiente virtual, a exibi\u00e7\u00e3o no bash j\u00e1 muda, nos indicando em qual ambiente n\u00f3s estamos. Todos os comandos e pacotes s\u00e3o v\u00e1lidos somente para esse ambiente. Isso facilita muito nosso gerenciamento quando trabalhamos com v\u00e1rios projetos.<\/p>\n\n\n\n<p><alerta>O diret\u00f3rio para nossa aplica\u00e7\u00e3o deve ficar dentro de \/home\/seu-usuario\/<strong>apps_wsgi<\/strong>\/<\/alerta><\/p>\n\n\n\n<p>Caso ainda n\u00e3o tenha sido criado, utilize os comandos abaixo:<br>\n<kh-terminal><span style=\"color: #808080;\">(testflask.kinghost.net) [testflask@web7697 ~]$<\/span> pwd<br>\n\/home\/testflask<br>\n<span style=\"color: #808080;\">(testflask.kinghost.net) [testflask@web7697 ~]$<\/span> cd apps_wsgi\/<br>\n<span style=\"color: #808080;\">(testflask.kinghost.net) [testflask@web7697 apps_wsgi]$<\/span> mkdir <prompt>nome-da-app<\/prompt><\/kh-terminal><\/p>\n\n\n\n<p>At\u00e9 agora voc\u00ea deve ter essa estrutura criada:<br>\n<box-info><span style=\"color: #808080;\">(testflask.kinghost.net) [testflask@web7697 apps_wsgi]$<\/span> ls -lah<br>\ndrwxrwxr-x 2 testflask testflask 4.0K May 7 03:26 myapp<br>\n-rw-rw-r&#8211; 1 testflask testflask 283 May 3 06:21 myapp.wsgi<br>\ndrwxrwxr-x 2 testflask testflask 4.0K May 3 06:21 .python-eggs<br>\ndrwxrwxr-x 4 testflask testflask 4.0K May 3 06:56 .site-packages<\/box-info><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Instalar_o_Flask\"><\/span>Instalar o Flask<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Para instalar o Flask usamos o gerenciador de m\u00f3dulos do python, chamado pip, com o comando a seguir, como estamos utilizando o virutalenv n\u00e3o \u00e9 preciso utilizar a flag &#8211;user<br> <kh-terminal>pip install flask &#8211;user<\/kh-terminal>  <\/p>\n\n\n\n<p>Junto com o Flask ser\u00e3o instaladas as depend\u00eancias necess\u00e1rias, podemos checar com o comando <em>pip freeze<\/em>.<br>\n<box-info><br>\n<strong>$ pip freeze<\/strong><br>\nclick==6.7<br>\nFlask==1.0.2<br>\nitsdangerous==0.24<br>\nJinja2==2.10<br>\nMarkupSafe==1.0<br>\nvirtualenv==15.2.0<br>\nWerkzeug==0.14.1<\/box-info><\/p>\n\n\n\n<p>\u00c9 uma boa pr\u00e1tica salvar os pacotes necess\u00e1rios para sua aplica\u00e7\u00e3o em um arquivo <em>requirements.txt<\/em>. Assim se houver necessidade de migrar o projeto ou de instal\u00e1-lo em outro ambiente, basta rodar o comando <em>pip install -r requirements.txt<\/em> e todos os componentes ser\u00e3o instalados.<\/p>\n\n\n\n<p>Voc\u00ea pode criar esse arquivo com os seguintes comandos:<br>\n<kh-terminal><span style=\"color: #808080;\">(testflask.kinghost.net) [testflask@web7697 apps_wsgi]$<\/span> cd testflask<br>\n<span style=\"color: #808080;\">$<\/span> pip freeze &gt; requirements.txt<br>\n<span style=\"color: #808080;\">$<\/span> cat requirements.txt<br>\n<span style=\"color: #707070;\">click==6.7<br>\nFlask==1.0.2<br>\nitsdangerous==0.24<br>\nJinja2==2.10<br>\nMarkupSafe==1.0<br>\nvirtualenv==15.2.0<br>\nWerkzeug==0.14.1<\/span><br>\n<\/kh-terminal><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criando_o_nosso_projeto_Flask\"><\/span>Criando o nosso projeto Flask<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Siga os seguintes passos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Estrutura_de_diretorios\"><\/span>Estrutura de diret\u00f3rios<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Use o seguinte comando:<\/p>\n\n\n\n<p>Nesse momento precisamos estar na pasta apps_wsgi\/testflask, caso n\u00e3o esteja, voc\u00ea pode acessar com o comando:<\/p>\n\n\n\n<p><kh-terminal>cd \/home\/<strong>usu\u00e1rio<\/strong>\/apps_wsgi\/testflask<\/kh-terminal><\/p>\n\n\n\n<p><strong>testflask<\/strong>&nbsp;-&gt; pasta onde fica o c\u00f3digo da aplica\u00e7\u00e3o;<br><strong>testflask\/templates<\/strong>&nbsp;-&gt; aqui vai o c\u00f3digo html das nossas p\u00e1ginas;<br>Geralmente as aplica\u00e7\u00f5es tamb\u00e9m cont\u00e9m um diret\u00f3rio&nbsp;<em>static<\/em>&nbsp;com as m\u00eddias est\u00e1ticas do projeto e arquivos .css e .js. Como nosso \u00e9 exemplo \u00e9 apenas um hello world, n\u00e3o criaremos<br>este diret\u00f3rio.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" data-src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/testflas.png\" alt=\"\" v-on:click=\"toggle_modal\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 194px; --smush-placeholder-aspect-ratio: 194\/69;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/testflas.png\" alt=\"\" v-on:click=\"toggle_modal\"\/><\/noscript><\/figure>\n\n\n\n<p>Voc\u00ea pode alterar o nome da pasta principal para o nome da aplica\u00e7\u00e3o para facilitar o gerenciamento de diversas aplica\u00e7\u00f5es, nesse guia vamos utilizar a pasta raiz como testflask.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Estrutura_de_arquivos\"><\/span>Estrutura de arquivos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Como a nossa aplica\u00e7\u00e3o \u00e9 um exemplo e o flask \u00e9 microframework, a aplica\u00e7\u00e3o ter\u00e1 um \u00fanico arquivo, contento as configura\u00e7\u00f5es, rotas e conex\u00e3o ao banaco de dados, caso necess\u00e1rio.<\/p>\n\n\n\n<p><strong>run.py<\/strong> &#8211; Ponto inicial da aplica\u00e7\u00e3o. Aqui ser\u00e1 iniciado o servidor flask e nossa app.<\/p>\n\n\n\n<p><small>Observa\u00e7\u00e3o: O flask apesar de ser um microframework, permite que possam ser criados arquivos separados, como um para configura\u00e7\u00f5es da app, um para conectar com o banco, um para views, um para rotas etc. mas dessa forma ser\u00e1 adiciona uma camada de complexidade maior na aplica\u00e7\u00e3o e dificultar o desenvolvimento de aplica\u00e7\u00f5es simples.<\/small><\/p>\n\n\n\n<p><kh-terminal>vim run.py<\/kh-terminal><\/p>\n\n\n\n<p>E colocamos o seguinte c\u00f3digo dentro do arquivo:\n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/python\n# -*- coding: utf-8 -*-\nfrom flask import Flask,render_template\n \nDEBUG = True\napp = Flask(__name__)\n \n@app.route('\/')\ndef index():\n return render_template('index.html')\n \nif __name__ == '__main__':\n        app.run()<\/code><\/pre>\n\n\n\n<p>Lembrando que este \u00e9 um exemplo bem b\u00e1sico, e n\u00e3o exige nenhuma configura\u00e7\u00e3o detalhada, por isso estou criando diretamente no vim.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Templates\"><\/span>Templates<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Vamos definir os c\u00f3digos de nossos templates agora. Ser\u00e3o usados um template base e um arquivo html, exemplificando o uso do Jinja2(framework de template)<\/p>\n\n\n\n<p>O arquivo <strong>base.html<\/strong> fica assim:\n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n  &lt;head&gt;\n    &lt;title&gt;{% block title %}{% endblock %}&lt;\/title&gt;\n    &lt;!-- Bootstrap core CSS --&gt;\n    &lt;link href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.7\/css\/bootstrap.min.css\" rel=\"stylesheet\"&gt;\n    &lt;!-- Custom styles for this template --&gt;\n    &lt;link href=\"https:\/\/getbootstrap.com\/examples\/jumbotron-narrow\/jumbotron-narrow.css\" rel=\"stylesheet\"&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;div class=\"container\"&gt;\n      &lt;div class=\"header clearfix\"&gt;\n        &lt;nav&gt;\n          &lt;ul class=\"nav nav-pills pull-right\"&gt;\n            &lt;li role=\"presentation\"&gt;&lt;a href=\"\/\"&gt;Home&lt;\/a&gt;&lt;\/li&gt;\n            &lt;li role=\"presentation\"&gt;&lt;a href=\"http:\/\/flask.pocoo.org\" target=\"_blank\"&gt;Flask Website&lt;\/a&gt;&lt;\/li&gt;\n          &lt;\/ul&gt;\n        &lt;\/nav&gt;\n      &lt;\/div&gt;\n      {% block body %}\n      {% endblock %}\n    &lt;\/div&gt; &lt;!-- \/container --&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>E o arquivo <strong>index.html<\/strong>\n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{% extends \"base.html\" %}\n{% block title %}P\u00e1gina Inicial{% endblock %}\n{% block body %}\n&lt;div class=\"jumbotron\"&gt;\n  &lt;h1&gt;Flask \u00e9 incrivel&lt;\/h1&gt;\n  &lt;p class=\"lead\"&gt;Flask \u00e9 um framework poderoso que permite criar aplica\u00e7\u00f5es complexas rapidamente ;) &lt;\/p&gt;\n&lt;\/div&gt;\n{% endblock %}<\/code><\/pre>\n\n\n\n<p>Lembrando que ambos devem ficar dentro da pasta app\/templates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"mod_wsgi\"><\/span>mod_wsgi<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Na estrutura da KingHost, o Python roda atrav\u00e9s do mod_wsgi em conjunto com o Apache, dessa forma precisamos configurar o arquivo .wsgi para que nossa app possa rodar corretamente.<\/p>\n\n\n\n<p>Primeiro podemos excluir o arquivo que o painel de controle cria automaticamente, que fica em <em>\/home\/usuario\/apps_wsgi<\/em> e ent\u00e3o criamos:<br> <kh-terminal>vim myapp.wsgi<\/kh-terminal>Para o <strong>python 3<\/strong> o c\u00f3digo (n\u00e3o esquecendo de trocar os itens grifados para os correspondentes do seu usu\u00e1rio): <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># vim: syntax=python\nimport sys\n# Na linha abaixo basta  informar o caminho completo para o arquivo bin\/activate_this.py dentro da pasta do virtual env\nactivate_this = '\/home\/artigo\/flask-na-kinghost\/apps_wsgi\/testflask\/virtual_env\/bin\/activate_this.py'\nwith open(activate_this) as file_:\n        exec(file_.read(), dict(__file__=activate_this))\nsys.path.append('\/home\/artigo\/flask-na-kinghost\/apps_wsgi\/testflask')\nfrom run import app as application<\/code><\/pre>\n\n\n\n<p>Para o <strong>python 2<\/strong> use o seguinte c\u00f3digo:\n<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># vim: syntax=python\nimport sys\n# Na linha abaixo e preciso informar o caminho completo para o arquivo bin\/activate_this.py dentro da pasta do virtual env\nactivate_this = '\/home\/usu\u00e1rio\/apps_wsgi\/testflask\/virtual_env\/bin\/activate_this.py'\nexecfile(activate_this, dict(__file__=activate_this))\nsys.path.append('\/home\/usu\u00e1rio\/apps_wsgi\/testflask')\nsys.path.append('\/home\/usu\u00e1rio\/apps_wsgi\/testflask\/virtual_env\/lib\/python2.6\/site-packages\/')\nfrom run import app as application<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Rodando\"><\/span>Rodando<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Estando tudo ok, basta atualizarmos nosso arquivo .wsgi para que a app seja recarregada, para isso precisamos utilizar o comando touch:<br> <kh-terminal>touch myapp.wsgi<\/kh-terminal><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/flask05.png\"><img decoding=\"async\" data-src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/flask05.png\" alt=\"\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 682px; --smush-placeholder-aspect-ratio: 682\/344;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/king.host\/wiki\/wp-content\/uploads\/2018\/06\/flask05.png\" alt=\"\"\/><\/noscript><\/a><\/figure><\/div>\n\n\n<p>Tudo pronto! <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ocorreu_um_erro_500_e_agora\"><\/span>Ocorreu um erro 500, e agora?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Pode ser que aconte\u00e7a algum tipo de erro enquanto voc\u00ea esta experienciando o desenvolvimento de webapps com Flask, sempre que encontrar algum tipo de erro voc\u00ea pode conferir o log da execu\u00e7\u00e3o diretamente no arquivo <strong>error.log<\/strong> na raiz do FTP (<strong>$HOME\/error.log<\/strong>), nele existe o report de erro do python com o que aconteceu de erro ao rodar a sua aplica\u00e7\u00e3o \ud83d\ude42<\/p>\n\n\n\n<p>O Flask \u00e9 ideal para desenvolvimento de aplica\u00e7\u00f5es simples, e ainda nos permite uma certa escalabilidade. Pois podemos come\u00e7ar com um core pequeno conforme nosso exemplo, e ir adicionando pacotes de acordo com a necessidade de nossa app. Com a engine do Jinja2, que j\u00e1 vem no core padr\u00e3o do Flask, podemos usar o recurso de heran\u00e7a em nossos templates e acrescentar dinamismo ao c\u00f3digo html, como vimos de uma forma bem b\u00e1sica nesse post.<\/p>\n\n\n\n<p>Flask \u00e9 muito simples, e a medida que voc\u00ea for se especializando, vai perceber que d\u00e1 pra desenvolver muita coisa legal de forma bem \u00e1gil com os recursos que esse framework nos disponibiliza.<\/p>\n\n\n\n<p><em>Fontes:<\/em><br>\n<a href=\"http:\/\/flask.pocoo.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/flask.pocoo.org\/<\/a><br>\n<a href=\"https:\/\/scotch.io\/tutorials\/getting-started-with-flask-a-python-microframework\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/scotch.io\/tutorials\/getting-started-with-flask-a-python-microframework<\/a><br>\n<a href=\"http:\/\/pythonclub.com.br\/what-the-flask-pt-2-flask-patterns-boas-praticas-na-estrutura-de-aplicacoes-flask.html\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/pythonclub.com.br\/what-the-flask-pt-2-flask-patterns-boas-praticas-na-estrutura-de-aplicacoes-flask.html<\/a><\/p>\n","protected":false},"author":9,"featured_media":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","article-category":[172],"article-tag":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/7544"}],"collection":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/comments?post=7544"}],"version-history":[{"count":15,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/7544\/revisions"}],"predecessor-version":[{"id":24474,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article\/7544\/revisions\/24474"}],"wp:attachment":[{"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/media?parent=7544"}],"wp:term":[{"taxonomy":"article-category","embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article-category?post=7544"},{"taxonomy":"article-tag","embeddable":true,"href":"https:\/\/king.host\/wiki\/wp-json\/wp\/v2\/article-tag?post=7544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}