
flask๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ํ์ด์ฌ ๊ฐ์ํ๊ฒฝ์์ ์งํํ๊ธฐ ์ํด ๊ฐ์ํ๊ฒฝ์ ์ค์ ํ๋ค.
CLIํ๊ฒฝ์์ ๊ฐ์ํ๊ฒฝ์ ๋ง๋ค๊ณ ์ถ์ ๋๋ ํ ๋ฆฌ๋ก ์์ง์ธ๋ค.
Programmers/flask-proj ๋๋ ์ด๊ฒฝ๋ก์ ์ค์ ํ๋ค.
๊ฐ์ํ๊ฒฝ ์์ฑ ๋ชจ๋ ์ค์น
pip install virtualenv
venv๋ผ๋ ์ด๋ฆ์ ๊ฐ์ํ๊ฒฝ ์์ฑ
virtualenv venv
๊ฐ์ํ๊ฒฝ ํ์ฑํ
source venv\Scripts\activate
๊ฐ์ํ๊ฒฝ์ ํ์ฑํ ํ ํ pip install๋ช
๋ น์ ํตํด ์ค์น๋ ๋ชจ๋์ ํ์ธํด๋ณด๋ฉด ์๋ฌด๋ฐ ๊ฒ๋ ๋จ์ง ์๋๋ค.
flask ์ค์น
pip install flask
์ด ํ ๋ค์ pip freeze๋ฅผ ์คํํ๋ฉด flask๊ฐ ๋์จ๋ค.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World!'
if __name__ == '__main__':
app.run()
์์ ์ฝ๋๋ฅผ ์์ฑํ ํ app.pyํ์ผ๋ก ์ ์ฅํ๋ค.
๊ทธ ํ CLIํ๊ฒฝ์ผ๋ก ๋์๊ฐ์ flask run๋ช
๋ น์ ์คํํ๋ฉด flask์๋ฒ๊ฐ ๊ตฌ๋ํ๋ค.
์ถ๋ ฅ๋ URL์ ์ ์ํด๋ณด๋ฉด Hello World! ๊ฐ ์ถ๋ ฅ๋ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค.
๐api๋?
ํ๋ก๊ทธ๋จ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๊ฒ์ ๋์์ฃผ๋ ๋งค๊ฐ์ฒด
๐rest๋?
representational state transfer
์น์๋ฒ๊ฐ ์์ฒญ์ ์๋ตํ๋ ๋ฐฉ๋ฒ๋ก ์ค ํ๋๋ก ๋ฐ์ดํฐ๊ฐ ์๋ ์์(resource)
๐rest api๋?
HTTP URI๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ
HTTP Method๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD๋ฅผ ์งํ
์์ app.pyํ์ผ์ CRUD๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
from flask import Flask, jsonify, request
app = Flask(__name__)
menus = [
{"id":1, "name": "Espresso","price":3800},
{"id":2, "name": "Americano","price":4100},
{"id":3, "name": "CafeLatte","price":4600},
]
@app.route('/')
def hello_flask():
return "Hello World"
#GET /menus | ์๋ฃ๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค
@app.route('/menus')
def get_menus():
return jsonify({"menus":menus})#jsonํ์ผ๋ก ๋ณํํ๊ธฐ ์ํด menus๋ฅผ ๋์
๋๋ฆฌ ํํ๋ก ๋ณํ
# menus๋ ๋ฆฌ์คํธ๋ก json์ผ๋ก ๋ณํํ ์ ์๋ค.
#๋ฐ๋ผ์ menus๋ฅผ value๋ก ํ๋ ์๋ก์ด ๋์
๋๋ฆฌ๋ฅผ ๋ง๋ค์ด์ค๋ค.
new_id = 4
# POST /menus : ์๋ฃ๋ฅผ ์์์ ์ถ๊ฐํ๋ค.
# @app.route๋ ๊ธฐ๋ณธ์ ์ผ๋ก methods=['GET']๋ผ๊ณ ๋์ด์๋ค.
# ๋๋จธ์ง HTTP ๋์๋ค, POST ๋ฑ์ ์ง์ ๋ช
์๋ฅผ ํด์ผํ๋ค.
@app.route('/menus', methods = ['POST'])#
def create_menu(): # reuqest๊ฐ JSON์ด๋ผ๊ณ ๊ฐ์
global new_id
#์ ๋ฌ๋ฐ์ ์๋ฃ๋ฅผ menus์์์ ์ถ๊ฐ
request_data = request.get_json() #{"name":...,"price":...}
new_menu = {
"id":new_id,
"name": request_data['name'],
"price": request_data['price'],
}
new_id+=1
menus.append(new_menu)
return jsonify(new_menu)
# PUT /menu/<int:id> : ํด๋นํ๋ id์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํฉ๋๋ค. (HTTPRequest์ Body์ ๊ฐฑ์ ํ ๋ด์ฉ์ด json์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.)
@app.route('/menus/<int:id>', methods=['PUT'])
def put_menu(id):
update_data = request.get_json()
try:
menus[id-1]['name'] = update_data['name']
menus[id-1]['price'] = update_data['price']
return jsonify(menus[id-1])
except Exception as e:
print(e)
return 'There was a problem!'
# DELETE /menu/<int:id> : ํด๋นํ๋ id์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
@app.route('/menus/<int:id>', methods=['DELETE'])
def delete_menu(id):
try:
del menus[id-1]
return jsonify(menus)
except Exception as e:
print(e)
return 'There was a problem!'
if __name__ == '__main__':
app.run()
*์ฝ๋์ ๋ํ ์ค๋ช
์ ์ฃผ์์ผ๋ก ๋ค ๋ฌ์๋์๋ค.
๋~!