これは、2019年 code-server に Advent Calender の 第9日目の記事です。今回も、code-server って何だろう?と言う事を解説していきます。
(1) code-server って何?
(2) Dockerで独自のcode-server 環境を作って見る
(3) VSCode の Plugin を 利用してみる
(4) DBなども含めたMVC環境を用意してみよう (1)
(5) DBなども含めたMVC環境を用意してみよう (2)
(6) DBなども含めたMVC環境を用意してみよう (3)
(7) DBなども含めたMVC環境を用意してみよう (4)
(8) DBなども含めたMVC環境を用意してみよう (5)
(9) DBなども含めたMVC環境を用意してみよう (6)
(10) おまけ
(NEXT->) オンライン環境篇 1日目 作業環境を整備する
(..) ローカルで、DBなどの環境も含めて構築するには
(..) オンライン上に置くには?
(..) K8Sなどの最近の流行りの環境と連携するには?
(..) Code-Serverを改造して、より良くしたい
前回の続きで、flaskを利用して APIを追加していきます。
今回の何?
Terminal は 複数を同時に起動できる
どんなAPIか決める
以前、作成したflaskを改造してみましょう
from flask import Flask, request as fl_request, Request
from typing import Dict
import json
import logging
app = Flask(__name__)
logger = logging.getLogger("XXX")
logging.basicConfig(level=logging.DEBUG)
@app.route("/users")
def get_user_from_id():
request:Request = fl_request
input:Dict = request.args
logger.debug("> input: {}".format(input))
user:Dict = {
"name":"one",
"email":"kyorohiro+one@example.com",
"id":1}
return json.dumps(user)
app.run("0.0.0.0",port=8080)
http://0.0.0.0/users?id=1
と、IDが渡されたら、そのIDに対応するユーザー情報を返すようにします。
動かしてみる
flaskを起動してみます。
$ python main.py
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
INFO:werkzeug: * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
新しく、terminalを開いて、curlコマンドを叩いてみる
$ curl 127.0.0.1:8080/users?id=1
{"name": "one", "email": "kyorohiro+one@example.com", "id": 1}
おっ、ユーザー情報がされました。
DBからデータを読み込んで表示してみる
pythonから、dbを操作するのに、今回は、dataset package を利用しています。
https://github.com/pudo/dataset
$ pip install dataset
mysqlを利用するので、mysqlclient package を追加します。
$ pip install mysqlclient
from flask import Flask, request as fl_request, Request
from typing import Dict
import json
import dataset
import logging
app = Flask(__name__)
logger = logging.getLogger("XXX")
logging.basicConfig(level=logging.DEBUG)
db:dataset.Database = dataset.connect('mysql://root:passwd@mysqld/app_db')
@app.route("/users")
def get_user_from_id():
request:Request = fl_request
input:Dict = request.args
logger.debug("> input: {}".format(input))
users_table:dataset.Table = db.get_table("users")
user:Dict = users_table.find_one(id=int(input["id"]))
return json.dumps(user)
app.run("0.0.0.0", port=8080)
dataset.connect
で、データーベースと接続して、users_table.find_one
でユーザー情報を取得しています。
動かしてみる
flaskを起動してみます。
$ python main.py
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
INFO:werkzeug: * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
新しく、terminalを開いて、curlコマンドを叩いてみる
$ curl 127.0.0.1:8080/users?id=1
{"name": "one", "email": "kyorohiro+one@example.com", "id": 1}
おっ、ユーザー情報がされました。
PS
requirements.txt を作成しておきましょう!!
pythonのパッケージは、ファイルにまとめておく習慣があります。
https://pip.readthedocs.io/en/1.1/requirements.html
pip install -r requirements.txt
-r コマンドラインオプションを追加して実行します。
Flask==1.1.1
dataset==1.1.2
mysqlclient==1.4.6
また、pip freeze > requirements_lock.txt
とすると、依存しているpackage の一覧をファイルに書き出せます。
次回
Flask で、userを追加してみます。
あと、2回くらいででローカル環境篇を終わらせて、オンライン環境篇、魔改造篇に入る予定です。