{"id":1043,"date":"2020-02-15T16:45:43","date_gmt":"2020-02-15T07:45:43","guid":{"rendered":"http:\/\/aiclub.kr\/?p=1043"},"modified":"2025-12-31T14:28:39","modified_gmt":"2025-12-31T05:28:39","slug":"%ed%8c%8c%ec%9d%b4%ec%8d%ac-flask-%ec%9b%b9%ea%b0%9c%eb%b0%9c-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-1-3","status":"publish","type":"post","link":"https:\/\/aiclub.kr\/?p=1043","title":{"rendered":"\ud30c\uc774\uc36c Flask \uc6f9\uac1c\ubc1c \ud504\ub85c\uc81d\ud2b8 1\/3"},"content":{"rendered":"\n<p>\ud30c\uc774\uc36c Flask \uae30\ubc18 \uc6f9\ud504\ub85c\uadf8\ub798\ubc0d \ud504\ub85c\uc81d\ud2b8 1\/3<\/p>\n\n\n\n<p>\ubcf8 \uacfc\uc815\uc740 \ud30c\uc774\uc36c Flask \ub97c \uae30\ubc18\uc73c\ub85c \uc6f9\uc9c4 \uc0ac\uc774\ud2b8\ub97c \uc81c\uc791\ud558\uace0 \uad00\ub9ac\ud398\uc774\uc9c0\uc5d0\uc11c \ucf58\ud150\uce20 \ubc0f \ud68c\uc6d0\uc744 \uad00\ub9ac\ud558\ub294 \ud504\ub85c\uc81d\ud2b8 \uc2e4\uc2b5 \uc911\uc2ec\uc758 \uacfc\uc815 \uc785\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\ud558\ub098\uc529 \ub530\ub77c\ud574\uc11c \uc2e4\uc2b5\ud574 \ubcf4\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ud504\ub85c\uc81d\ud2b8 1\/3 \uacfc\uc815<\/strong><br><strong>&#8211; \uad00\ub9ac\ud398\uc774\uc9c0(DeshBoard) \ub9cc\ub4e4\uae30 1\ub2e8\uacc4 <\/strong><br><strong>&#8211; \ub85c\uadf8\uc778 \ud398\uc774\uc9c0 \ub9cc\ub4e4\uae30<\/strong><\/p>\n\n\n\n<p><strong>1. pythonanywhere \uc0c8\ub85c\uc6b4 \uacc4\uc815\uc73c\ub85c \ud68c\uc6d0\uac00\uc785 \ubc0f \ub85c\uadf8\uc778<\/strong><a rel=\"noreferrer noopener\" href=\"https:\/\/www.pythonanywhere.com\/pricing\/\" target=\"_blank\">https:\/\/www.pythonanywhere.com\/pricing\/<\/a><br>\uc800\ub294 \uae30\uc874 \uc544\uc774\ub514 aiclub -&gt; \uc774\ubc88 \uc218\uc5c5\uc6a9\uc740 aiclub2\ub85c \ub9cc\ub4e4\uc5c8\uc5b4\uc5b4 (\ub2f9\uc5f0\ud788 \uc0ac\uc6a9\uc548\ud55c \ub2e4\ub978 \uc774\uba54\uc77c\ub85c) <br>\ud68c\uc6d0\uac00\uc785 \ud6c4\uc5d0\ub294 \uc774\uba54\uc77c\ub85c \uac00\uc154\uc11c \uc2b9\uc778 \uba54\uc77c \ud655\uc778\ud558\uc2dc\ub294\uac70 \uc78a\uc9c0 \ub9c8\uc2dc\uad6c\uc694.<br>\uc800\uc758 \uacbd\uc6b0 \ud574\uc678\uc5d0\uc11c \uc218\uc2e0\ub41c \uba54\uc77c\uc774\ub77c \uc2a4\ud338 \uba54\uc77c\ud568\uc73c\ub85c \ube60\uc84c\ub354\uad70\uc694 \u315c\u315c<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>2. Flask \uac1c\ubc1c\ud658\uacbd \ube60\ub974\uac8c \uad6c\ucd95\ud558\uae30<\/strong><br>1) Console \uc0c1\ub2e8 \uba54\ub274 \ud074\ub9ad &gt; Bash \ud074\ub9ad<\/p>\n\n\n\n<p>2) \uac00\uc0c1\ud658\uacbd \ub9cc\ub4e4\uae30\uba85\ub839\uc5b4 : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkvirtualenv --python=\/usr\/bin\/python3.6 my-virtualenv<\/code><\/pre>\n\n\n\n<p>3) Flask \uc124\uce58\uba85\ub839\uc5b4 : <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install flask<\/code><\/pre>\n\n\n\n<p>4) \uc0c1\ub2e8 \uba54\ub274\uc5d0\uc11c Web \ud074\ub9ad (\uc0c8\ucc3d)<br>&#8211; Add a new web app \ud074\ub9ad<br>&#8211; Next \ud074\ub9ad<br>&#8211; Flask \ud074\ub9ad<br>&#8211; Python 3.6 \ud074\ub9ad (\uc774\ubc88\uc5d0\ub294 \ucd5c\uc2e0\ubc84\uc804\uc73c\ub85c \ud574\ubd05\uc2dc\ub2e4)<br>&#8211; Next \ud074\ub9ad<br>&#8211; \ub2e4\uc2dc Web \uba54\ub274 \ud074\ub9ad &gt; Vitualenv : \ud56d\ubaa9\uc5d0 Enter path &#8230;. \uc774\uacf3\uc5d0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/home\/\ub2f9\uc2e0\uc758ID\uc785\ub825\/.virtualenvs\/my-virtualenv<\/code><\/pre>\n\n\n\n<p>\uc785\ub825 \ud6c4 V \ud074\ub9ad- Reload \ud074\ub9ad\ud6c4 \uc0ac\uc774\ud2b8 \uc811\uc18d \ud655\uc778<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>3. \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ud68c\uc6d0 \ud14c\uc774\ube14 \ub9cc\ub4e4\uae30<\/strong><br>1) pymysql \uc124\uce58\ub97c \uc704\ud574 \uac00\uc0c1\ud658\uacbd \ucf58\uc194 <br>\uc2e4\ud589\uba85\ub839\uc5b4 :&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install pymysql<\/code><\/pre>\n\n\n\n<p>2) \uc0c1\ub2e8 \uba54\ub274\uc5d0 DataBase \ud074\ub9ad\ub370\uc774\ud130\ubca0\uc774\uc2a4 \ube44\ubc00\ubc88\ud638 \uc785\ub825\ud6c4 \uc0dd\uc131<br>* 2\ubd84\uc815\ub3c4 \uae30\ub2e4\ub824\ub3c4 \ubc18\uc751\uc774 \uc5c6\uc73c\uba74 \uadf8\ub0e5 \uc0c1\ub2e8 \uba54\ub274\uc5d0 DataBase\ub97c \ud074\ub9ad \ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.<br>* \ud68c\uc6d0\uac00\uc785 \ud6c4 \uc774\uba54\uc77c \uc778\uc99d \uc548\ud558\uace0 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc0dd\uc131\ud558\uba74 \uaf2c\uc77c\uc218 \uc788\uc73c\ub2c8 \uaf2d \uc778\uc99d\uc744 \uba3c\uc800 \ud558\uc138\uc694!<\/p>\n\n\n\n<p>3) Start a console on \ud074\ub9ad<\/p>\n\n\n\n<p>4) \ud68c\uc6d0 \ud14c\uc774\ube14 \ub9cc\ub4e4\uae30<\/p>\n\n\n\n<p>5) \uad00\ub9ac\uc790 \ud68c\uc6d0 \ucd94\uac00<br>&#8211; \ud504\ub85c\ud544\ub85c \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\ub97c \/static\/upload \ud3f4\ub354\ub97c \ub9cc\ub4e4\uc5b4\uc11c member.png \ud30c\uc77c\ub85c \uc5c5\ub85c\ub4dc<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.iconfinder.com\/\" target=\"_blank\">https:\/\/www.iconfinder.com\/<\/a>&nbsp;<br>\uc601\uc5b4\ub85c face \uac80\uc0c9 \ud6c4 free \uc774\ubbf8\uc9c0 \ud558\ub098 \ubc1b\uc544\uc11c \uc0ac\uc6a9<\/p>\n\n\n\n<p>&#8211; \ucffc\ub9ac \uc2e4\ud589<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>insert into member set userid = 'admin', userpw = password('1234'), name = '\uc774\uacbd\uc6a9', img = 'member.png';<\/code><\/pre>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>4. BootStrap \ub85c\uadf8\uc778 \ud14c\ub9c8 \ud65c\uc6a9\ud558\uae30<\/strong><br>1) \uad00\ub9ac \ud398\uc774\uc9c0 \ub85c\uadf8\uc778 \ud15c\ud50c\ub9bf \uc801\uc6a9<br><a rel=\"noreferrer noopener\" href=\"https:\/\/colorlib.com\/wp\/template\/login-form-v18\/\" target=\"_blank\">https:\/\/colorlib.com\/wp\/template\/login-form-v18\/<\/a><\/p>\n\n\n\n<p>* \ud574\ub2f9 \ud15c\ud50c\ub9bf\uc744 \uc0ac\uc6a9\ud574\uc11c \uc801\uc6a9\ucca8\ubd80\ud30c\uc77c : <br>Login_v18.zip (\ud15c\ud50c\ub9bf \uc6d0\ubcf8)\uc801\uc6a9\uacb0\uacfc :&nbsp;<br><a rel=\"noreferrer noopener\" href=\"http:\/\/aiclub2.pythonanywhere.com\/admin\" target=\"_blank\">http:\/\/aiclub2.pythonanywhere.com\/admin<\/a>&nbsp;<br>(\uc544\uc774\ub514 : admin \/ \ube44\ubc00\ubc88\ud638 : 1234)<br><\/p>\n\n\n\n<p><strong>2) \ub85c\uadf8\uc778 \ud14c\ub9c8 \uc2a4\ud14c\ud2f1 \ud30c\uc77c \uc5c5\ub85c\ub4dc<\/strong><br>&#8211; mysite\uc5d0 static \ud3f4\ub354 \ub9cc\ub4e4\uae30<br>&#8211; static \ud3f4\ub354\uc5d0 login \ud3f4\ub354 \ub9cc\ub4e4\uae30<br>&#8211; login \ud3f4\ub354\uc5d0 \ub85c\uadf8\uc778 \ud14c\ub9c8 \uc2a4\ud14c\ud2f1 \uad00\ub828 \ud30c\uc77c\ub4e4\uc744 login.zip\uc73c\ub85c \uc555\ucd95\ud574\uc11c \ud30c\uc77c \uc5c5\ub85c\ub4dc\ud558\uae30<br>&#8211; \uac00\uc0c1\ud658\uacbd\uc5d0 \uc811\uc18d\ud574\uc11c&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd ~\/mysite\/static\/login\nunzip login.zip<\/code><\/pre>\n\n\n\n<p>&#8211; \uc2e4\ud589 (\uc555\ucd95 \ud480\uace0 \ub098\uba74 zip\ud30c\uc77c \uc0ad\uc81c \ud574\ub3c4 \ub428)<br>&#8211; css \ud30c\uc77c \uc911\uc5d0 \uacbd\ub85c \uc218\uc815\ud558\uae30 \/static \uc808\ub300 \uacbd\ub85c\ub85c \uc801\uc6a9 (\ubc14\uafb8\uae30 \ub2e8\ucd95\ud0a4 Ctrl + H)<br><\/p>\n\n\n\n<p>3) \ud15c\ud50c\ub9bf \ud30c\uc77c \ub9cc\ub4e4\uae30<br>\/templates\/admin\/login.html <br>\ub85c\uadf8\uc778 \ud3fc \ud398\uc774\uc9c0<br>&#8211; css, js, img \ud30c\uc77c \uacbd\ub85c\ub97c \/static\/login \uc73c\ub85c \uc218\uc815 (Ctrl + H)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"ko\">\n&lt;head>\n    &lt;title>Admin Login&lt;\/title>\n    &lt;meta charset=\"UTF-8\">\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    &lt;link rel=\"icon\" type=\"image\/png\" href=\"\/static\/login\/images\/icons\/favicon.ico?v=1\"\/>\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/vendor\/bootstrap\/css\/bootstrap.min.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/fonts\/font-awesome-4.7.0\/css\/font-awesome.min.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/fonts\/Linearicons-Free-v1.0.0\/icon-font.min.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/vendor\/animate\/animate.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/vendor\/css-hamburgers\/hamburgers.min.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/vendor\/animsition\/css\/animsition.min.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/vendor\/select2\/select2.min.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/vendor\/daterangepicker\/daterangepicker.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/css\/util.css\">\n    &lt;link rel=\"stylesheet\" type=\"text\/css\" href=\"\/static\/login\/css\/main.css\">\n&lt;\/head>\n&lt;body style=\"background-color: #666666;\">\n \n    &lt;div class=\"limiter\">\n        &lt;div class=\"container-login100\">\n            &lt;div class=\"wrap-login100\">\n                &lt;form action=\"\/admin\" method=\"post\" class=\"login100-form validate-form\">\n                    &lt;span class=\"login100-form-title p-b-43\">\n                        Login to continue\n                    &lt;\/span>\n  \n                    &lt;div class=\"wrap-input100 validate-input\" data-validate = \"Valid ID is required: abcd\">\n                        &lt;input class=\"input100\" type=\"text\" name=\"userid\">\n                        &lt;span class=\"focus-input100\">&lt;\/span>\n                        &lt;span class=\"label-input100\">Email&lt;\/span>\n                    &lt;\/div>\n  \n                    &lt;div class=\"wrap-input100 validate-input\" data-validate=\"Password is required\">\n                        &lt;input class=\"input100\" type=\"password\" name=\"userpw\">\n                        &lt;span class=\"focus-input100\">&lt;\/span>\n                        &lt;span class=\"label-input100\">Password&lt;\/span>\n                    &lt;\/div>\n \n                    &lt;div class=\"flex-sb-m w-full p-t-3 p-b-32\">\n                        &lt;div class=\"contact100-form-checkbox\">\n                            &lt;input class=\"input-checkbox100\" id=\"ckb1\" type=\"checkbox\" name=\"remember-me\">\n                            &lt;label class=\"label-checkbox100\" for=\"ckb1\">\n                                Remember me\n                            &lt;\/label>\n                        &lt;\/div>\n \n                        &lt;div>\n                            &lt;a href=\"\/static\/login\/#\" class=\"txt1\">\n                                Forgot Password?\n                            &lt;\/a>\n                        &lt;\/div>\n                    &lt;\/div>\n \n                    &lt;div class=\"container-login100-form-btn\">\n                        &lt;button class=\"login100-form-btn\">\n                            Login\n                        &lt;\/button>\n                    &lt;\/div>\n \n                    {% if msg %}\n                    &lt;div style=\"padding-top:10px;\">\n                        &lt;div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\n                            &lt;strong>{{msg}}&lt;\/strong>\n                            &lt;button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">\n                                &lt;span aria-hidden=\"true\">&amp;times;&lt;\/span>\n                            &lt;\/button>\n                        &lt;\/div>\n                    &lt;\/div>\n                    {% endif %}\n                     &lt;div class=\"text-center p-t-46 p-b-20\">\n                        &lt;span class=\"txt2\">\n                            or sign up using\n                        &lt;\/span>\n                    &lt;\/div>\n                     &lt;div class=\"login100-form-social flex-c-m\">\n                        &lt;a href=\"\/static\/login\/#\" class=\"login100-form-social-item flex-c-m bg1 m-r-5\">\n                            &lt;i class=\"fa fa-facebook-f\" aria-hidden=\"true\">&lt;\/i>\n                        &lt;\/a>\n                         &lt;a href=\"\/static\/login\/#\" class=\"login100-form-social-item flex-c-m bg2 m-r-5\">\n                            &lt;i class=\"fa fa-twitter\" aria-hidden=\"true\">&lt;\/i>\n                        &lt;\/a>\n                    &lt;\/div>\n                 &lt;\/form>\n                 &lt;div class=\"login100-more\" style=\"background-image: url('\/static\/login\/images\/bg-01.jpg?v=1');\">\n                &lt;\/div>\n            &lt;\/div>\n        &lt;\/div>\n    &lt;\/div>\n    &lt;script src=\"\/static\/login\/vendor\/jquery\/jquery-3.2.1.min.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/vendor\/animsition\/js\/animsition.min.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/vendor\/bootstrap\/js\/popper.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/vendor\/bootstrap\/js\/bootstrap.min.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/vendor\/select2\/select2.min.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/vendor\/daterangepicker\/moment.min.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/vendor\/daterangepicker\/daterangepicker.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/vendor\/countdowntime\/countdowntime.js\">&lt;\/script>\n    &lt;script src=\"\/static\/login\/js\/main.js\">&lt;\/script>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n\n\n\n<p>4) \/template\/admin\/base.html \ud15c\ud50c\ub9bf \ud30c\uc77c \ub9cc\ub4e4\uae30<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"ko\">\n&lt;head>\n    &lt;meta charset=\"utf-8\">\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    &lt;title>ADMIN&lt;\/title>\n    &lt;!-- BootStrap CDN -->\n    &lt;link rel=\"stylesheet\" href=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/4.4.1\/css\/bootstrap.min.css\">\n    &lt;script src=\"https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/3.4.1\/jquery.min.js\">&lt;\/script>\n    &lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/popper.js\/1.16.0\/umd\/popper.min.js\">&lt;\/script>\n    &lt;script src=\"https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/4.4.1\/js\/bootstrap.min.js\">&lt;\/script>\n&lt;\/head>\n&lt;body>\n    {% block content %}{% endblock %}\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n\n\n\n<p>5) \/templates\/admin\/main.html \uad00\ub9ac\uc790 \ud398\uc774\uc9c0 \ub9cc\ub4e4\uae30<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{% extends \"\/admin\/base.html\" %}\n{% block content %}\n&lt;h1>{{member['ss_name']}}\ub2d8(\ubcf4\uc548 : {{member['ss_level']}} \uae09) \uad00\ub9ac\ud398\uc774\uc9c0\uc5d0 \uc624\uc2e0\uac83\uc744 \ud658\uc601\ud569\ub2c8\ub2e4.&lt;\/h1>\n&lt;img src=\"\/static\/upload\/{{member['ss_img']}}\" class=\"img-thumbnail\">\n&lt;div>\n    &lt;a href=\"\/admin\/logout\" class=\"btn btn-success\">\ub85c\uadf8\uc544\uc6c3&lt;\/a>\n&lt;\/div>\n{% endblock %}<\/code><\/pre>\n\n\n\n<p>6) \/flask_app.py \uc218\uc815<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, render_template, request, redirect, session\nimport pymysql\nimport time\n \napp = Flask(__name__)\napp.secret_key = 'aiclub'\n \n@app.route('\/admin', methods=['GET','POST'])\ndef admin():\n    if request.method == \"GET\":\n        return render_template('\/admin\/login.html')\n    else:\n        userid = request.form['userid']\n        userpw = request.form['userpw']\n \n        db = pymysql.connect(\n            host = 'UserID.mysql.pythonanywhere-services.com',\n            port = 3306,\n            user = 'UserID',\n            passwd = 'DB Password',\n            db = 'UserID$default',\n            charset = 'utf8'\n        )\n        cursor = db.cursor()\n        sql = \"\"\" select name, level, img from member\n        where userid = '%s' and userpw = password('%s');\n        \"\"\" % (userid, userpw)\n        cursor.execute(sql)\n        rows = cursor.fetchone()\n        db.close\n \n        if rows:\n            session['ss_id'] = userid\n            session['ss_name'] = rows[0]\n            session['ss_level'] = rows[1]\n            session['ss_img'] = rows[2]\n            return redirect('\/admin\/main')\n        else:\n            return render_template('\/admin\/login.html',\n            msg=\"\uc544\uc774\ub514 \ub610\ub294 \ube44\ubc00\ubc88\ud638\ub97c \uc798\ubabb \uc785\ub825\ud558\uc168\uc2b5\ub2c8\ub2e4.\")\n \n@app.route('\/admin\/main')\ndef admin_main():\n    if session['ss_id'] == False:\n        return redirect('\/admin')\n    else:\n        member = {\n            \"ss_name\":session['ss_name'],\n            \"ss_level\":session['ss_level'],\n            \"ss_img\":session['ss_img']\n        }\n        return render_template('\/admin\/main.html',\n        member=member)\n \n@app.route('\/admin\/logout')\ndef admin_logout():\n    session['ss_id'] = False\n    session['ss_name'] = False\n    session['ss_level'] = False\n    session['ss_img'] = False\n    return redirect('\/admin')<\/code><\/pre>\n\n\n\n<p>\/login : \ub85c\uadf8\uc778 \ucc98\ub9ac (\ud15c\ud50c\ub9bf \uc5c6\uc74c)&nbsp;<br>\/logout : \ub85c\uadf8\uc544\uc6c3 \ucc98\ub9ac (\ud15c\ud50c\ub9bf \uc5c6\uc74c)<br>\/admim : \uad00\ub9ac\ud398\uc774\uc9c0<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>6. \ucd5c\uc885 \uacb0\uacfc\ubb3c<\/strong><br><a rel=\"noreferrer noopener\" href=\"http:\/\/aiclub2.pythonanywhere.com\/login\" target=\"_blank\">http:\/\/aiclub2.pythonanywhere.com\/login<\/a><br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"960\" height=\"450\" src=\"https:\/\/i1.wp.com\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login.png?fit=755%2C354\" alt=\"\" class=\"wp-image-1045\" srcset=\"https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login.png 960w, https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login-300x141.png 300w, https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login-755x354.png 755w, https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login-768x360.png 768w\" sizes=\"(max-width: 960px) 100vw, 960px\" \/><\/figure>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\ud574\ub2f9 \uac8c\uc2dc\uae00\uc5d0\uc11c \ucf54\ub4dc\uac00 \ubcf4\uae30 \ud798\ub4e4\uba74 \ub124\uc774\ubc84 \uce74\ud398\uc5d0 \uc62c\ub824 \ub193\uc740 \ub0b4\uc6a9\uc744 \ubcf4\uc2dc\uba74 \ub429\ub2c8\ub2e4.<br>\ub2e8, PC\uc5d0 \ucd5c\uc801\ud654 \ub418\uc5b4 \uc788\uc73c\ub2c8 PC\uc5d0\uc11c \uc811\uc18d\ud574\uc11c \ubcf4\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/cafe.naver.com\/aiclubcafe\">https:\/\/cafe.naver.com\/aiclubcafe<\/a><\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ud30c\uc774\uc36c Flask \uae30\ubc18 \uc6f9\ud504\ub85c\uadf8\ub798\ubc0d \ud504\ub85c\uc81d\ud2b8 1\/3 \ubcf8 \uacfc\uc815\uc740 \ud30c\uc774\uc36c Flask \ub97c \uae30\ubc18\uc73c\ub85c \uc6f9\uc9c4 \uc0ac\uc774\ud2b8\ub97c \uc81c\uc791\ud558\uace0 \uad00\ub9ac\ud398\uc774\uc9c0\uc5d0\uc11c \ucf58\ud150\uce20 \ubc0f<\/p>\n","protected":false},"author":1,"featured_media":1045,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[36,91,126,128,127,41],"class_list":["post-1043","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-study","tag-ai","tag-flask","tag-login","tag-128","tag-127","tag-41"],"featured_image_urls":{"full":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login.png",960,450,false],"thumbnail":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login-150x150.png",150,150,true],"medium":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login-300x141.png",300,141,true],"medium_large":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login-768x360.png",640,300,true],"large":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login-755x354.png",640,300,true],"1536x1536":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login.png",960,450,false],"2048x2048":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login.png",960,450,false],"morenews-large":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login.png",825,387,false],"morenews-medium":["https:\/\/aiclub.kr\/wp-content\/uploads\/2020\/02\/login.png",590,277,false]},"author_info":{"info":["\uc774\uacbd\uc6a9"]},"category_info":"<a href=\"https:\/\/aiclub.kr\/?cat=32\" rel=\"category\">STUDY<\/a>","tag_info":"STUDY","comment_count":"0","_links":{"self":[{"href":"https:\/\/aiclub.kr\/index.php?rest_route=\/wp\/v2\/posts\/1043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiclub.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aiclub.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aiclub.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aiclub.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1043"}],"version-history":[{"count":4,"href":"https:\/\/aiclub.kr\/index.php?rest_route=\/wp\/v2\/posts\/1043\/revisions"}],"predecessor-version":[{"id":1054,"href":"https:\/\/aiclub.kr\/index.php?rest_route=\/wp\/v2\/posts\/1043\/revisions\/1054"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aiclub.kr\/index.php?rest_route=\/wp\/v2\/media\/1045"}],"wp:attachment":[{"href":"https:\/\/aiclub.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aiclub.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aiclub.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}