{"id":1212,"date":"2021-04-22T18:32:54","date_gmt":"2021-04-22T18:32:54","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/?post_type=chapter&#038;p=1212"},"modified":"2021-05-07T09:17:43","modified_gmt":"2021-05-07T09:17:43","slug":"veebilehe-loomine-flaskis","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/chapter\/veebilehe-loomine-flaskis\/","title":{"raw":"Veebilehe loomine Flaskis","rendered":"Veebilehe loomine Flaskis"},"content":{"raw":"<p style=\"text-align: justify\">J\u00e4rgnevas kahes peat\u00fckis vaatame me l\u00e4hemalt, kuidas PostgreSQL andmebaasi kasutada koos veebiraamistikuga Flask. Nendes peat\u00fckkides eeldame, et olete l\u00e4binud Tarkvaraarenduse \u00f5piku 2.tr\u00fcki peat\u00fcki \u201c<a href=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/flask-sissejuhatus\/\">Veebiraamistike loomine.Flask\u201d<\/a>.<\/p>\r\n<p style=\"text-align: justify\">Eesm\u00e4rgiks on luua veebirakendus, kus kasutajal on v\u00f5imalik veebivormi kommentaar ning selle autor sisestada. Kommentaar ning selle autor salvestatakse seej\u00e4rel PostgreSQL andmebaasi ning neid kuvatakse ka veebilehel.<\/p>\r\n\r\n<h2>Vajaminevate moodulite installimine<\/h2>\r\n<p style=\"text-align: justify\">Rakenduse loomiseks on soovitatav kasutada Thonny programmeerimiskeskkonda.<\/p>\r\n<p style=\"text-align: justify\">K\u00f5igepealt peame me installima Flaski mooduli. Selleks valige Thonny men\u00fc\u00fcst <em>T\u00f6\u00f6riistad<\/em> -&gt; <em>Halda lisapakette <\/em>(ingl <em>Tools <\/em>-&gt; <em>Manage Packages<\/em>) ning kirjutage otsinguaknasse <em>Flask<\/em>. Seej\u00e4rel vajutage nuppu \u201c<em>Otsi PyPI-st\u201d<\/em> ja seej\u00e4rel leitakse teile Flaski moodul. Vajutage sellele ning avanenud vaates klikale nupul \u201c<em>Install\u201d<\/em>, et installida Flaski moodul.<\/p>\r\n\r\n<div class=\"wp-nocaption wp-image-773 aligncenter\"><img class=\"wp-image-773 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flaski_installimine-300x206.png\" alt=\"\" width=\"670\" height=\"460\" \/><\/div>\r\n<p style=\"text-align: justify\">Selleks, et Flaskis andmebaase kasutada, tuleb installida ka moodul Flask-SQLAlchemy. Selleks l\u00e4bi samad sammud, nagu mooduli Flask installimiselgi.<\/p>\r\n\r\n<div class=\"wp-nocaption wp-image-774 aligncenter\"><img class=\"wp-image-774 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flask-SQLAlchemy_installimine-300x206.png\" alt=\"\" width=\"670\" height=\"460\" \/><\/div>\r\n<p style=\"text-align: justify\">Kuna Flask-SQLAlchemy vajab enda t\u00f6\u00f6ks moodulit SQLAlchemy, siis Flask-SQLAlchemy installimisel installiti ka moodul SQLAlchemy. Kuna aga SQLAlchemy viimase stabiilse versiooniga 1.4.1 oli PostgreSQL andmebaasiga \u00fchendamisel probleeme, tuleks SQLAlchemy versioon muuta vanemaks.<\/p>\r\n<p style=\"text-align: justify\">Selleks mine j\u00e4llegi Thonny men\u00fc\u00fcs <em>T\u00f6\u00f6riistad<\/em> -&gt; <em>Halda lisapakette <\/em>ning kirjuta otsinguaknasse SQLAlchemy. Seej\u00e4rel vajuta nupule \u201c<em>Otsi PyPI-st\u201d<\/em> ning ava SQLAlchemy moodul. N\u00fc\u00fcd vajuta nupul <em>\u201c\u2026\u201d<\/em> ning avanenud aknas vali soovitud versiooniks 1.3.23. Seej\u00e4rel vajuta nupule \u201c<em>Installi\u201d<\/em>, et muuta SQLAlchemy versioon 1.3.23-ks.<\/p>\r\n\r\n<div class=\"wp-nocaption wp-image-777 aligncenter\"><img class=\"wp-image-777 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/SQLAlchemy_versiooni_muutmine-300x205.png\" alt=\"\" width=\"670\" height=\"458\" \/><\/div>\r\n<p style=\"text-align: justify\">Meil vaja installida ka mooduli psycopg2 versioon 2.8.6, mis on vajalik meie PostgreSQL andmebaasiga \u00fchendamiseks. Selleks mine Thonny men\u00fc\u00fcs <em>T\u00f6\u00f6riistad<\/em> -&gt; <em>Halda lisapakette <\/em>ning kirjuta otsinguaknasse psycopg2. Seej\u00e4rel vajuta nupule \u201c<em>Otsi PyPI-st\u201d<\/em> ning ava psycopg2 moodul. N\u00fc\u00fcd vajuta nupul <em>\u201c\u2026\u201d<\/em> ja vali avanenud aknas soovitud versiooniks 2.8.6. Seej\u00e4rel vajuta nupule \u201c<em>Installi\u201d<\/em>.<\/p>\r\n\r\n<div class=\"wp-nocaption wp-image-778 aligncenter\"><img class=\"wp-image-778 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/psycopg2_installimine-300x206.png\" alt=\"\" width=\"670\" height=\"460\" \/><\/div>\r\n<h2>Veebirakenduse loomine<\/h2>\r\n<p style=\"text-align: justify\">K\u00f5igepealt loome me rakenduse \u00fcldise struktuuri ilma andmebaasi toeta.<\/p>\r\n<p style=\"text-align: justify\">Selleks loo esmalt fail <em>app<\/em>.py sisuga:<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">from flask import Flask, render_template, request, redirect\r\n\r\napp = Flask(__name__)\r\n\r\n@app.route('\/', methods=['POST', 'GET'])\r\ndef avaleht():\r\n    return render_template('avaleht.html')<\/pre>\r\n<p style=\"text-align: justify\">Nagu n\u00e4ha, siis failis <em>app.py<\/em> on meil kirja pandud vaid \u00fcks failitee ja sellele vastav funktsioon, sest meie veebileht koosneb vaid \u00fchest vahelehest, st kogu info kuvatakse avalehel. Kuna avaleht peab sisaldama veebivormi ning kuvama andmebaasist saadud infot, on sellel ka \u201cPOST\u201d ning \"GET\" meetodid defineeritud. Hetkel me aga meetodis <code>avaleht<\/code> kasutaja sisestatud andmeid ning andmebaasist tulevaid andmeid ei kasuta, vaid renderdame lihtsalt avalehe uuesti.<\/p>\r\n<p style=\"text-align: justify\">N\u00fc\u00fcd on meil vaja luua failid <em>avaleht.html\u00a0<\/em>ja <em>baas.html<\/em>, mis hakkab endas hoidma html-struktuuri.<\/p>\r\n<p style=\"text-align: justify\">Selleks loo esmalt uus kaust nimega <em>templates<\/em> failiga <em>app.py<\/em> samasse kausta.<\/p>\r\n\r\n<div class=\"wp-nocaption wp-image-785 alignleft\"><img class=\"wp-image-785 alignleft\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kaust_templates-300x33.png\" alt=\"\" width=\"536\" height=\"59\" \/><\/div>\r\n&nbsp;\r\n\r\n&nbsp;\r\n\r\nN\u00fc\u00fcd liigu kausta <em>templates<\/em> ning loo sinna vajalikud .<em>html<\/em> failid.\r\n<div class=\"wp-nocaption alignnone wp-image-786\"><img class=\"alignnone wp-image-1216\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/flask-kommentaarid-html-failid-300x32.png\" alt=\"\" width=\"516\" height=\"55\" \/><\/div>\r\nFail <em>baas.html <\/em>peaks v\u00e4lja n\u00e4gema j\u00e4rgnev:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n&lt;link rel=\"stylesheet\" href=\"static\/css\/stylesheet.css\"&gt;\r\n{% block head %} &lt;title&gt;Kommentaaride veebileht&lt;\/title&gt; {% endblock %}\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n{% block body %} {% endblock %}\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\r\n<p style=\"text-align: justify\">Fail <em>avaleht.html<\/em> hoiab endas kommentaari lisamise veebivormi ning info kuvamiseks kasutatakse ts\u00fcklit. Selle faili sisu on selline:<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">{% extends 'baas.html' %}\r\n{% block body %}\r\n&lt;h1&gt;Tere tulemast veebilehele, kus sa saad j\u00e4tta kommentaari!&lt;\/h1&gt;\r\n&lt;h2&gt;Sisesta kommentaar&lt;\/h2&gt;\r\n&lt;form action='\/' method='POST'&gt;\r\n  Kommentaar: \r\n  &lt;br&gt;\r\n  &lt;input type='text' name='sisu' id='sisu'&gt;\r\n  &lt;br&gt;\r\n  Autor: \r\n  &lt;br&gt;\r\n  &lt;input type='text' name='autor' id='autor'&gt;\r\n  &lt;br&gt;\r\n  &lt;input class='nupp' type='submit' value='Sisesta'&gt;\r\n  &lt;\/form&gt;\r\n  &lt;div class=\"kommentaaride-ala\"&gt;\r\n  &lt;h3&gt;K\u00f5ik kommentaarid:&lt;\/h3&gt;\r\n  {% for kommentaar in kommentaarid %}\r\n  &lt;div class=\"kommentaar\"&gt;\r\n    &lt;p&gt;{{ kommentaar.sisu }}&lt;\/p&gt;\r\n    &lt;p class=\"autor\"&gt; Autor: {{ kommentaar.autor }}\r\n  &lt;\/div&gt;\r\n  {% endfor %}\r\n  &lt;\/div&gt;\r\n{% endblock %}<\/pre>\r\n<p style=\"text-align: justify\">Lisaks <em>.html <\/em>failidele on meil vaja luua ka <em>.css<\/em> fail kujunduse jaoks. Selleks loo rakenduse <em>app.py<\/em> ja kaustaga <em>templates<\/em> samasse kausta uus kaust <em>static<\/em>.<\/p>\r\n\r\n<div class=\"wp-nocaption alignnone wp-image-793\"><img class=\"alignnone wp-image-793\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kausta_sisu_2-300x58.png\" alt=\"\" width=\"424\" height=\"82\" \/><\/div>\r\n<p style=\"text-align: justify\">Seej\u00e4rel liigu kausta <em>static<\/em> ning loo sinna uus kaust <em>css<\/em>. Liigu n\u00fc\u00fcd kausta\u00a0<em>css <\/em> ja loo sinna fail nimega <em>stylesheet.css<\/em>, mille sisu on j\u00e4rgnev:<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\">body {\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    text-align: center;\r\n    background: whitesmoke\r\n}\r\n\r\nh1 {\r\n    text-align: center;\r\n    color: green;\r\n}\r\n\r\nh2{\r\n    margin-top: 70px;\r\n}\r\n\r\nh3 {\r\n    text-align: left;\r\n}\r\n\r\nform {\r\n    margin:auto;\r\n    display: block;\r\n    margin-top:30px;\r\n}\r\n\r\ninput {\r\n    width: 200px;\r\n    padding: 12px 20px;\r\n    margin: 8px 0;\r\n    border-radius: 5px;\r\n}\r\n\r\n.nupp {\r\n    background-color: green;\r\n    color: white;\r\n    padding: 12px 40px;\r\n    margin-top: 15px;\r\n    font-weight: bold;\r\n    font-size: smaller;\r\n}\r\n\r\n.kommentaaride-ala {\r\n    margin: 30px;\r\n    padding: 30px;\r\n    background: lightgrey;\r\n}\r\n\r\n.kommentaar {\r\n    margin-top: 10px;\r\n    text-align: left;\r\n    background: whitesmoke;\r\n    padding: 5px 20px;\r\n}\r\n\r\n.autor {\r\n    font-size: 12px;\r\n    color: teal;\r\n}<\/pre>\r\n<p style=\"text-align: justify\">N\u00fc\u00fcd v\u00f5ib Thonny\u2019s k\u00e4ivitada <em>app.py\u00a0<\/em>ja vaadata meie loodud veebilehte aadressilt <a href=\"http:\/\/127.0.0.1:5000\/\">http:\/\/127.0.0.1:5000\/<\/a>.<\/p>\r\n<img class=\" wp-image-1235 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta-300x225.png\" alt=\"\" width=\"1024\" height=\"768\" \/>\r\n<p style=\"text-align: justify\">J\u00e4rgmises peat\u00fckis \u00fchendame me \u00e4sja loodud veebirakenduse PostgreSQL andmebaasiga ning vaatame, kuidas sinna andmeid salvestada ning neid hiljem ka meie veebilehel kuvada.<\/p>","rendered":"<p style=\"text-align: justify\">J\u00e4rgnevas kahes peat\u00fckis vaatame me l\u00e4hemalt, kuidas PostgreSQL andmebaasi kasutada koos veebiraamistikuga Flask. Nendes peat\u00fckkides eeldame, et olete l\u00e4binud Tarkvaraarenduse \u00f5piku 2.tr\u00fcki peat\u00fcki \u201c<a href=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/flask-sissejuhatus\/\">Veebiraamistike loomine.Flask\u201d<\/a>.<\/p>\n<p style=\"text-align: justify\">Eesm\u00e4rgiks on luua veebirakendus, kus kasutajal on v\u00f5imalik veebivormi kommentaar ning selle autor sisestada. Kommentaar ning selle autor salvestatakse seej\u00e4rel PostgreSQL andmebaasi ning neid kuvatakse ka veebilehel.<\/p>\n<h2>Vajaminevate moodulite installimine<\/h2>\n<p style=\"text-align: justify\">Rakenduse loomiseks on soovitatav kasutada Thonny programmeerimiskeskkonda.<\/p>\n<p style=\"text-align: justify\">K\u00f5igepealt peame me installima Flaski mooduli. Selleks valige Thonny men\u00fc\u00fcst <em>T\u00f6\u00f6riistad<\/em> -&gt; <em>Halda lisapakette <\/em>(ingl <em>Tools <\/em>-&gt; <em>Manage Packages<\/em>) ning kirjutage otsinguaknasse <em>Flask<\/em>. Seej\u00e4rel vajutage nuppu \u201c<em>Otsi PyPI-st\u201d<\/em> ja seej\u00e4rel leitakse teile Flaski moodul. Vajutage sellele ning avanenud vaates klikale nupul \u201c<em>Install\u201d<\/em>, et installida Flaski moodul.<\/p>\n<div class=\"wp-nocaption wp-image-773 aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-773 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flaski_installimine-300x206.png\" alt=\"\" width=\"670\" height=\"460\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flaski_installimine-300x206.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flaski_installimine-65x45.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flaski_installimine-225x154.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flaski_installimine-350x240.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flaski_installimine.png 667w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/div>\n<p style=\"text-align: justify\">Selleks, et Flaskis andmebaase kasutada, tuleb installida ka moodul Flask-SQLAlchemy. Selleks l\u00e4bi samad sammud, nagu mooduli Flask installimiselgi.<\/p>\n<div class=\"wp-nocaption wp-image-774 aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-774 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flask-SQLAlchemy_installimine-300x206.png\" alt=\"\" width=\"670\" height=\"460\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flask-SQLAlchemy_installimine-300x206.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flask-SQLAlchemy_installimine-65x45.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flask-SQLAlchemy_installimine-225x154.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flask-SQLAlchemy_installimine-350x240.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/Flask-SQLAlchemy_installimine.png 667w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/div>\n<p style=\"text-align: justify\">Kuna Flask-SQLAlchemy vajab enda t\u00f6\u00f6ks moodulit SQLAlchemy, siis Flask-SQLAlchemy installimisel installiti ka moodul SQLAlchemy. Kuna aga SQLAlchemy viimase stabiilse versiooniga 1.4.1 oli PostgreSQL andmebaasiga \u00fchendamisel probleeme, tuleks SQLAlchemy versioon muuta vanemaks.<\/p>\n<p style=\"text-align: justify\">Selleks mine j\u00e4llegi Thonny men\u00fc\u00fcs <em>T\u00f6\u00f6riistad<\/em> -&gt; <em>Halda lisapakette <\/em>ning kirjuta otsinguaknasse SQLAlchemy. Seej\u00e4rel vajuta nupule \u201c<em>Otsi PyPI-st\u201d<\/em> ning ava SQLAlchemy moodul. N\u00fc\u00fcd vajuta nupul <em>\u201c\u2026\u201d<\/em> ning avanenud aknas vali soovitud versiooniks 1.3.23. Seej\u00e4rel vajuta nupule \u201c<em>Installi\u201d<\/em>, et muuta SQLAlchemy versioon 1.3.23-ks.<\/p>\n<div class=\"wp-nocaption wp-image-777 aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-777 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/SQLAlchemy_versiooni_muutmine-300x205.png\" alt=\"\" width=\"670\" height=\"458\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/SQLAlchemy_versiooni_muutmine-300x205.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/SQLAlchemy_versiooni_muutmine-65x44.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/SQLAlchemy_versiooni_muutmine-225x154.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/SQLAlchemy_versiooni_muutmine-350x239.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/SQLAlchemy_versiooni_muutmine.png 664w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/div>\n<p style=\"text-align: justify\">Meil vaja installida ka mooduli psycopg2 versioon 2.8.6, mis on vajalik meie PostgreSQL andmebaasiga \u00fchendamiseks. Selleks mine Thonny men\u00fc\u00fcs <em>T\u00f6\u00f6riistad<\/em> -&gt; <em>Halda lisapakette <\/em>ning kirjuta otsinguaknasse psycopg2. Seej\u00e4rel vajuta nupule \u201c<em>Otsi PyPI-st\u201d<\/em> ning ava psycopg2 moodul. N\u00fc\u00fcd vajuta nupul <em>\u201c\u2026\u201d<\/em> ja vali avanenud aknas soovitud versiooniks 2.8.6. Seej\u00e4rel vajuta nupule \u201c<em>Installi\u201d<\/em>.<\/p>\n<div class=\"wp-nocaption wp-image-778 aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-778 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/psycopg2_installimine-300x206.png\" alt=\"\" width=\"670\" height=\"460\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/psycopg2_installimine-300x206.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/psycopg2_installimine-65x45.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/psycopg2_installimine-225x154.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/psycopg2_installimine-350x240.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/psycopg2_installimine.png 664w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/div>\n<h2>Veebirakenduse loomine<\/h2>\n<p style=\"text-align: justify\">K\u00f5igepealt loome me rakenduse \u00fcldise struktuuri ilma andmebaasi toeta.<\/p>\n<p style=\"text-align: justify\">Selleks loo esmalt fail <em>app<\/em>.py sisuga:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">from flask import Flask, render_template, request, redirect\r\n\r\napp = Flask(__name__)\r\n\r\n@app.route('\/', methods=['POST', 'GET'])\r\ndef avaleht():\r\n    return render_template('avaleht.html')<\/pre>\n<p style=\"text-align: justify\">Nagu n\u00e4ha, siis failis <em>app.py<\/em> on meil kirja pandud vaid \u00fcks failitee ja sellele vastav funktsioon, sest meie veebileht koosneb vaid \u00fchest vahelehest, st kogu info kuvatakse avalehel. Kuna avaleht peab sisaldama veebivormi ning kuvama andmebaasist saadud infot, on sellel ka \u201cPOST\u201d ning &#8220;GET&#8221; meetodid defineeritud. Hetkel me aga meetodis <code>avaleht<\/code> kasutaja sisestatud andmeid ning andmebaasist tulevaid andmeid ei kasuta, vaid renderdame lihtsalt avalehe uuesti.<\/p>\n<p style=\"text-align: justify\">N\u00fc\u00fcd on meil vaja luua failid <em>avaleht.html\u00a0<\/em>ja <em>baas.html<\/em>, mis hakkab endas hoidma html-struktuuri.<\/p>\n<p style=\"text-align: justify\">Selleks loo esmalt uus kaust nimega <em>templates<\/em> failiga <em>app.py<\/em> samasse kausta.<\/p>\n<div class=\"wp-nocaption wp-image-785 alignleft\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-785 alignleft\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kaust_templates-300x33.png\" alt=\"\" width=\"536\" height=\"59\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kaust_templates-300x33.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kaust_templates-65x7.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kaust_templates-225x25.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kaust_templates-350x39.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kaust_templates.png 506w\" sizes=\"auto, (max-width: 536px) 100vw, 536px\" \/><\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>N\u00fc\u00fcd liigu kausta <em>templates<\/em> ning loo sinna vajalikud .<em>html<\/em> failid.<\/p>\n<div class=\"wp-nocaption alignnone wp-image-786\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1216\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/flask-kommentaarid-html-failid-300x32.png\" alt=\"\" width=\"516\" height=\"55\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/flask-kommentaarid-html-failid-300x32.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/flask-kommentaarid-html-failid-65x7.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/flask-kommentaarid-html-failid-225x24.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/flask-kommentaarid-html-failid-350x38.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/flask-kommentaarid-html-failid.png 541w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/div>\n<p>Fail <em>baas.html <\/em>peaks v\u00e4lja n\u00e4gema j\u00e4rgnev:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n&lt;link rel=\"stylesheet\" href=\"static\/css\/stylesheet.css\"&gt;\r\n{% block head %} &lt;title&gt;Kommentaaride veebileht&lt;\/title&gt; {% endblock %}\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n{% block body %} {% endblock %}\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p style=\"text-align: justify\">Fail <em>avaleht.html<\/em> hoiab endas kommentaari lisamise veebivormi ning info kuvamiseks kasutatakse ts\u00fcklit. Selle faili sisu on selline:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">{% extends 'baas.html' %}\r\n{% block body %}\r\n&lt;h1&gt;Tere tulemast veebilehele, kus sa saad j\u00e4tta kommentaari!&lt;\/h1&gt;\r\n&lt;h2&gt;Sisesta kommentaar&lt;\/h2&gt;\r\n&lt;form action='\/' method='POST'&gt;\r\n  Kommentaar: \r\n  &lt;br&gt;\r\n  &lt;input type='text' name='sisu' id='sisu'&gt;\r\n  &lt;br&gt;\r\n  Autor: \r\n  &lt;br&gt;\r\n  &lt;input type='text' name='autor' id='autor'&gt;\r\n  &lt;br&gt;\r\n  &lt;input class='nupp' type='submit' value='Sisesta'&gt;\r\n  &lt;\/form&gt;\r\n  &lt;div class=\"kommentaaride-ala\"&gt;\r\n  &lt;h3&gt;K\u00f5ik kommentaarid:&lt;\/h3&gt;\r\n  {% for kommentaar in kommentaarid %}\r\n  &lt;div class=\"kommentaar\"&gt;\r\n    &lt;p&gt;{{ kommentaar.sisu }}&lt;\/p&gt;\r\n    &lt;p class=\"autor\"&gt; Autor: {{ kommentaar.autor }}\r\n  &lt;\/div&gt;\r\n  {% endfor %}\r\n  &lt;\/div&gt;\r\n{% endblock %}<\/pre>\n<p style=\"text-align: justify\">Lisaks <em>.html <\/em>failidele on meil vaja luua ka <em>.css<\/em> fail kujunduse jaoks. Selleks loo rakenduse <em>app.py<\/em> ja kaustaga <em>templates<\/em> samasse kausta uus kaust <em>static<\/em>.<\/p>\n<div class=\"wp-nocaption alignnone wp-image-793\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-793\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kausta_sisu_2-300x58.png\" alt=\"\" width=\"424\" height=\"82\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kausta_sisu_2-300x58.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kausta_sisu_2-65x13.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kausta_sisu_2-225x44.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kausta_sisu_2-350x68.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/kausta_sisu_2.png 375w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><\/div>\n<p style=\"text-align: justify\">Seej\u00e4rel liigu kausta <em>static<\/em> ning loo sinna uus kaust <em>css<\/em>. Liigu n\u00fc\u00fcd kausta\u00a0<em>css <\/em> ja loo sinna fail nimega <em>stylesheet.css<\/em>, mille sisu on j\u00e4rgnev:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"css\">body {\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    text-align: center;\r\n    background: whitesmoke\r\n}\r\n\r\nh1 {\r\n    text-align: center;\r\n    color: green;\r\n}\r\n\r\nh2{\r\n    margin-top: 70px;\r\n}\r\n\r\nh3 {\r\n    text-align: left;\r\n}\r\n\r\nform {\r\n    margin:auto;\r\n    display: block;\r\n    margin-top:30px;\r\n}\r\n\r\ninput {\r\n    width: 200px;\r\n    padding: 12px 20px;\r\n    margin: 8px 0;\r\n    border-radius: 5px;\r\n}\r\n\r\n.nupp {\r\n    background-color: green;\r\n    color: white;\r\n    padding: 12px 40px;\r\n    margin-top: 15px;\r\n    font-weight: bold;\r\n    font-size: smaller;\r\n}\r\n\r\n.kommentaaride-ala {\r\n    margin: 30px;\r\n    padding: 30px;\r\n    background: lightgrey;\r\n}\r\n\r\n.kommentaar {\r\n    margin-top: 10px;\r\n    text-align: left;\r\n    background: whitesmoke;\r\n    padding: 5px 20px;\r\n}\r\n\r\n.autor {\r\n    font-size: 12px;\r\n    color: teal;\r\n}<\/pre>\n<p style=\"text-align: justify\">N\u00fc\u00fcd v\u00f5ib Thonny\u2019s k\u00e4ivitada <em>app.py\u00a0<\/em>ja vaadata meie loodud veebilehte aadressilt <a href=\"http:\/\/127.0.0.1:5000\/\">http:\/\/127.0.0.1:5000\/<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1235 aligncenter\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta-300x225.png\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta-300x225.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta-768x576.png 768w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta-65x49.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta-225x169.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta-350x263.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/04\/veebileht_ilma_andmeteta.png 1024w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p style=\"text-align: justify\">J\u00e4rgmises peat\u00fckis \u00fchendame me \u00e4sja loodud veebirakenduse PostgreSQL andmebaasiga ning vaatame, kuidas sinna andmeid salvestada ning neid hiljem ka meie veebilehel kuvada.<\/p>\n","protected":false},"author":33,"menu_order":11,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-1212","chapter","type-chapter","status-publish","hentry"],"part":3,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/1212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/users\/33"}],"version-history":[{"count":17,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/1212\/revisions"}],"predecessor-version":[{"id":1370,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/1212\/revisions\/1370"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/parts\/3"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/1212\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/media?parent=1212"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapter-type?post=1212"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/contributor?post=1212"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/license?post=1212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}