{"id":640,"date":"2018-12-21T20:06:04","date_gmt":"2018-12-21T11:06:04","guid":{"rendered":"https:\/\/dong1lkim.oboki.net\/?p=640"},"modified":"2020-06-24T01:10:30","modified_gmt":"2020-06-23T16:10:30","slug":"flask-%ec%9b%b9%ed%8e%98%ec%9d%b4%ec%a7%80-%eb%a7%8c%eb%93%a4%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/oboki.net\/workspace\/python\/flask-%ec%9b%b9%ed%8e%98%ec%9d%b4%ec%a7%80-%eb%a7%8c%eb%93%a4%ea%b8%b0\/","title":{"rendered":"[Python] Flask &#8211; \uc6f9\ud398\uc774\uc9c0 \ub9cc\ub4e4\uae30"},"content":{"rendered":"<h1>python flask &#8211; \uc6f9 \ud398\uc774\uc9c0 \ub9cc\ub4e4\uae30<\/h1>\n<blockquote><p>\n  render_template \ub97c \uc774\uc6a9\ud574\uc11c \uc6f9\ud398\uc774\uc9c0\ub97c \uc0dd\uc131\ud574\ub0bc \uc218 \uc788\ub2e4.\n<\/p><\/blockquote>\n<p><a href=\"https:\/\/oboki.net\/programming\/language\/python\/python-flask-%EC%B4%88%EA%B0%84%EB%8B%A8-web-api-%ED%95%A8%EC%88%98\/\">python flask &#8211; \ucd08\uac04\ub2e8 WEB API\/\ud568\uc218<\/a> \ud3ec\uc2a4\ud305\uc5d0 \uc774\uc5b4\uc11c \ud574\ub2f9 \uacb0\uacfc\ub97c \uc6f9\ud398\uc774\uc9c0\ub85c \ud45c\ud604\ud55c\ub2e4. \uc55e\uc120 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 lotto \ub2f9\ucca8 \uacb0\uacfc\ub97c json \ud615\ud0dc\ub85c \ubc18\ud658\ud574\uc8fc\uc5c8\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"\/workspace\/wp-content\/uploads\/2018\/12\/lotto_json_47.png\" alt=\"lotto_json_47\" \/><\/p>\n<p>\uc704\uc640 \uac19\uc774 \ud568\uc218 \uacb0\uacfc\ub97c http\ub85c \ub9ac\ud134\ubc1b\uc744 \uc218 \uc788\uc5c8\ub294\ub370 \uc5ec\uae30\uc5d0 \uc801\uc808\ud55c \ud15c\ud50c\ub9bf\uacfc \uc2a4\ud0c0\uc77c\ub9cc \ub354\ud574\uc8fc\uba74 \uc6f9\ud398\uc774\uc9c0\ub97c \uc0dd\uc131\ud574\ub0bc \uc218 \uc788\ub2e4.<\/p>\n<h2>main.py<\/h2>\n<p>\uc544\ub798\uc640 \uac19\uc774 <code>render_template()<\/code>\uc744 \uc774\uc6a9\ud558\uba74, \ubbf8\ub9ac \uc791\uc131\ud55c \ud15c\ud50c\ub9bf\uc5d0 \ud568\uc218 \uacb0\uacfc\ub97c \ud568\uaed8 \uc804\ub2ec\ud574 html \ucf54\ub4dc\ub97c \ubc18\ud658\ud574\uc900\ub2e4.<\/p>\n<pre><code class=\"py\"># main.py\n\nimport flask\nfrom flask import render_template, request\nimport pickle\n\nwith open('lotto.bin','rb') as f:\n    lotto = pickle.load(f)\n    f.close()\n\napp = flask.Flask(__name__)\napp.config[\"DEBUG\"] = True\n\n@app.route('\/', methods=['GET',])\ndef index():\n    return \"Hello World!\"\n\n@app.route('\/win_result', methods=['GET','POST'])\ndef win_result():\n    rnd = int(request.args['round'])\n    return render_template('win_result.html',win_result=lotto[rnd])\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0',port='8888')\n<\/code><\/pre>\n<h2>win_result.html<\/h2>\n<p><code>render_template()<\/code> \uc5d0\uc11c \uc0ac\uc6a9\ud560 \ud15c\ud50c\ub9bf\uc740 main.py \uac00 \uc2e4\ud589\ub418\ub294 \uacbd\ub85c \ud558\uc704\uc5d0 <code>templates<\/code> \ub514\ub809\ud1a0\ub9ac \uc548\uc5d0 \uc0dd\uc131\ud574\uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<p><code>vi .\/templates\/win_result.html<\/code><\/p>\n<pre><code class=\"html\">&lt;!doctype html&gt;\n&lt;html&gt;\n    &lt;body&gt;\n        &lt;form&gt;\n            &lt;title&gt;Lotto Win Result&lt;\/title&gt;\n        &lt;\/form&gt;\n\n        {{ win_result['round'] }}&lt;br&gt;\n        {% for n in win_result['win result']['numbers'] %}\n            {{ n }}\n        {% endfor %}\n        {{ win_result['win result']['bonus'] }}&lt;br&gt;\n        {% for rank, result in win_result['win result']['win'].items() %}\n            {{ rank }}&lt;br&gt;\n            {% for total, num in result.items() %}\n                {{ total }}\n                {{ num }}&lt;br&gt;\n            {% endfor %}\n        {% endfor %}\n\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<p>\uc704\uc640 \uac19\uc774 jinja2 \ubb38\ubc95\uc73c\ub85c <code>dict<\/code>, <code>list<\/code> \uc640 \uac19\uc740 \ub370\uc774\ud130\ud0c0\uc785\ub3c4 \ud65c\uc6a9\ud560 \uc218 \uc788\uace0, <code>if<\/code> \uc870\uac74\ubb38\uc744 \uc774\uc6a9\ud558\uac70\ub098 <code>for loop<\/code>\ub97c \uc774\uc6a9\ud55c <code>iteration<\/code> \ub3c4 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc774\uc81c \ub2e4\uc2dc 47\ud68c\ucc28 \ub2f9\ucca8 \uacb0\uacfc \ud398\uc774\uc9c0\uc5d0 \ubc29\ubb38\ud574\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc6f9 \ud398\uc774\uc9c0\uac00 \ubc18\ud658\ub41c\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"\/workspace\/wp-content\/uploads\/2018\/12\/lotto_template_47.png\" alt=\"lotto_template_47\" \/><\/p>\n<p>\uc870\uae08 \ubc0b\ubc0b\ud558\ub2c8\uae4c \uc2a4\ud0c0\uc77c\uc744 \uc880 \ub354\ud574\uc8fc\uba74,<\/p>\n<pre><code class=\"html\">&lt;!doctype html&gt;\n&lt;html lang=\"ko\"&gt;\n\n  &lt;head&gt;\n\n    &lt;meta charset=\"utf-8\"&gt;\n\n    &lt;title&gt;Lotto Win Result&lt;\/title&gt;\n\n    &lt;style&gt;\n\n            table th {\n                font-weight: normal; }\n\n            table td {\n                border-bottom:solid 1px #f8f8f8;\n            }\n\n            table &gt; thead &gt; tr &gt; th,\n            table &gt; tbody &gt; tr &gt; th,\n            table &gt; tfoot &gt; tr &gt; th,\n            table &gt; thead &gt; tr &gt; td,\n            table &gt; tbody &gt; tr &gt; td,\n            table &gt; tfoot &gt; tr &gt; td {\n                padding: 5px; \n            }\n\n            table thead tr th {\n                font-size: 12px;\n                color: #121212;\n                text-transform: uppercase;\n                font-weight: bold;\n                letter-spacing: 0.05em;\n                background: #aaaaaa;\n                text-align: left;\n            }\n\n      #container {\n        width: 840px;\n        margin: 10px auto;\n        padding: 20px;\n        border: 1px solid #000000;\n      }\n      #header {\n        padding: 20px;\n        margin-bottom: 20px;\n        border: 1px solid #000000;\n      }\n      #content {\n        width: 530px;\n        padding: 20px;\n        margin-bottom: 20px;\n        float: left;\n        border: 1px solid #000000;\n      }\n      #sidebar {\n        width: 210px;\n        padding: 20px;\n        margin-bottom: 20px;\n        float: right;\n        border: 1px solid #000000;\n      }\n      #footer {\n        clear: both;\n        padding: 20px;\n        border: 1px solid #000000;\n                text-align: center;\n      }\n      @media ( max-width: 820px ) {\n        #container {\n          width: auto;\n        }\n        #content {\n          float: none;\n          width: auto;\n        }\n        #sidebar {\n          float: none;\n          width: auto;\n        }\n      }\n    &lt;\/style&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;div id=\"container\"&gt;\n\n      &lt;div id=\"header\"&gt;\n        &lt;h1&gt;lotto \ucd94\ucca8 \uacb0\uacfc&lt;\/h1&gt;\n      &lt;\/div&gt;\n\n      &lt;div id=\"content\"&gt;\n        &lt;h2&gt;{{ win_result['round'] }} \ud68c\ucc28 \ub2f9\ucca8 \uacb0\uacfc&lt;\/h2&gt;\n        &lt;table&gt;\n          &lt;thead&gt;\n            &lt;tr&gt;&lt;th&gt;\ub2f9\ucca8\ubc88\ud638&lt;\/th&gt;\n            &lt;th&gt;&lt;\/th&gt;\n            &lt;th&gt;\ubcf4\ub108\uc2a4&lt;\/th&gt;&lt;\/tr&gt;\n          &lt;\/thead&gt;\n          &lt;tbody&gt;\n            &lt;tr&gt;&lt;td&gt;\n              &lt;table&gt;\n                &lt;tbody&gt;&lt;tr&gt;\n                                {% for n in win_result['win result']['numbers'] %}\n                                    &lt;td&gt;{{ n }}&lt;\/td&gt;\n                                {% endfor %}\n                &lt;\/tr&gt;&lt;\/tbody&gt;\n              &lt;\/table&gt;\n            &lt;\/td&gt;\n            &lt;td&gt;+&lt;\/td&gt;\n            &lt;td&gt;\n              &lt;table&gt;\n                &lt;tbody&gt;&lt;tr&gt;\n                                &lt;td&gt;{{ win_result['win result']['bonus'] }}&lt;\/td&gt;\n                &lt;\/tr&gt;&lt;\/tbody&gt;\n              &lt;\/table&gt;\n            &lt;\/td&gt;&lt;\/tr&gt;\n          &lt;\/tbody&gt;\n        &lt;\/table&gt;&lt;br&gt;\n        &lt;table&gt;\n          &lt;thead&gt;\n          &lt;tr&gt;\n          &lt;th&gt;\uc21c\uc704&lt;\/th&gt;\n          &lt;th&gt;\ub4f1\uc704\ubcc4 \ucd1d \ub2f9\ucca8\uae08\uc561&lt;\/th&gt;\n          &lt;th&gt;\ub2f9\ucca8 \uac8c\uc784 \uc218&lt;\/th&gt;\n          &lt;\/tr&gt;\n          &lt;\/thead&gt;\n          &lt;tbody&gt;\n                    {% for rank, result in win_result['win result']['win'].items() %}\n                        &lt;tr&gt;\n                        &lt;td&gt;{{ rank }}&lt;\/td&gt;\n                        {% for key, value in result.items() %}\n                            &lt;td&gt;{{ value }}&lt;\/td&gt;\n                        {% endfor %}\n                        &lt;\/tr&gt;\n                    {% endfor %}\n          &lt;\/tbody&gt;\n        &lt;\/table&gt;\n      &lt;\/div&gt;\n\n      &lt;div id=\"sidebar\"&gt;\n        &lt;h2&gt;\uba54\ub274&lt;\/h2&gt;\n        &lt;ul&gt;\n          &lt;li&gt;\ud648&lt;\/li&gt;\n          &lt;li&gt;\uc18c\uac1c&lt;\/li&gt;\n          &lt;li&gt;\ub2f9\ucca8 \uacb0\uacfc \uc870\ud68c&lt;\/li&gt;\n        &lt;\/ul&gt;\n      &lt;\/div&gt;\n\n      &lt;div id=\"footer\"&gt;\n        &lt;p&gt;dong1lkim, University of Seoul&lt;\/p&gt;\n      &lt;\/div&gt;\n\n    &lt;\/div&gt;\n\n  &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<p>\ub2e4\uc74c\uacfc \uac19\uc740 \uc6f9\ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4\uc5b4\ub0bc \uc218 \uc788\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"\/workspace\/wp-content\/uploads\/2018\/12\/lotto_style_47.png\" alt=\"lotto_style_47\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>python flask &#8211; \uc6f9 \ud398\uc774\uc9c0 \ub9cc\ub4e4\uae30 render_template \ub97c \uc774\uc6a9\ud574\uc11c \uc6f9\ud398\uc774\uc9c0\ub97c \uc0dd\uc131\ud574\ub0bc \uc218 \uc788\ub2e4. python flask &#8211; \ucd08\uac04\ub2e8 WEB API\/\ud568\uc218 \ud3ec\uc2a4\ud305\uc5d0 \uc774\uc5b4\uc11c \ud574\ub2f9 \uacb0\uacfc\ub97c \uc6f9\ud398\uc774\uc9c0\ub85c \ud45c\ud604\ud55c\ub2e4. \uc55e\uc120 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 lotto \ub2f9\ucca8 \uacb0\uacfc\ub97c json \ud615\ud0dc\ub85c \ubc18\ud658\ud574\uc8fc\uc5c8\ub2e4. \uc704\uc640 \uac19\uc774 \ud568\uc218 \uacb0\uacfc\ub97c http\ub85c \ub9ac\ud134\ubc1b\uc744 \uc218 \uc788\uc5c8\ub294\ub370 \uc5ec\uae30\uc5d0 \uc801\uc808\ud55c \ud15c\ud50c\ub9bf\uacfc \uc2a4\ud0c0\uc77c\ub9cc \ub354\ud574\uc8fc\uba74 \uc6f9\ud398\uc774\uc9c0\ub97c \uc0dd\uc131\ud574\ub0bc \uc218 \uc788\ub2e4. main.py \uc544\ub798\uc640 \uac19\uc774 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40,10],"tags":[41,123,34],"class_list":["post-640","post","type-post","status-publish","format-standard","hentry","category-flask","category-python","tag-flask","tag-html","tag-python"],"_links":{"self":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/comments?post=640"}],"version-history":[{"count":6,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/640\/revisions"}],"predecessor-version":[{"id":1190,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/640\/revisions\/1190"}],"wp:attachment":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/media?parent=640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/categories?post=640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/tags?post=640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}