Flask를 활용한 간단한 web app을 구현하고,
Postman을 활용하여 get / post 테스트를 해보았다.
이를 좀더 구체화시키기 위해 다음과 같은 과제를 수행한다.
앞서 간단히 진행한 get / post 과제는 자원 관리 CRUD(Create, Read, Update, Delete) 중 Read 와 Create이다.
나머지 Update, Delete를 구현하라.
PUT /menu/<int:id>
목표 id에 해당하는 데이터를 갱신DELETE /menu/<int:id>
목표 id에 해당하는 데이터를 삭제@app.route()
의 인자로 들어가는 경로에 다음과 같이 사용 가능@app.route('/<name>') # URL에 <>를 붙임으로써 이를 함수의 인자로 대입 가능
def my_view_func(name):
return name
# PUT /menus | 자원의 특정 자료를 갱신한다.
@app.route('/menus/<int:id>', methods=['PUT'])
def update_menu(id):
# 전달받은 자료를 자원의 특정 id의 자료로 갱신한다.
request_data = request.get_json() # {"name" : ..., "price": ...}
# menu 범위를 벗어나지 않을때만 갱신한다.
if id >= 1 and id <= len(menus):
menus[id - 1] = {
"id": id,
"name": request_data['name'],
"price": request_data['price'],
}
return jsonify(menus)
return "id does not exist"
# DELETE /menus | 자원의 특정 자료를 삭제한다.
@app.route('/menus/<int:id>', methods=['DELETE'])
def delete_menu(id):
# 특정 id의 자료를 자원에서 삭제한다.
for i, item in enumerate(menus):
if item["id"] == id:
del menus[i]
return jsonify(menus)
새로운 menu를 추가할 때 id를 증가시킬 것
def create_menu(): # request가 JSON이라고 가정
# 전달받은 자료를 menus 자원에 추가
request_data = request.get_json() # {"name" : ..., "price": ...}
new_menu = {
"id" : len(menus)+1,
"name" : request_data['name'],
"price" : request_data['price'],
}
menus.append(new_menu)
return jsonify(menus)
menu를 추가할 때, id를 기존 menus의 길이를 계산하여 더하는 것으로 구현
데이터베이스에 연동하여, 서버를 재시작해도 정보가 유지되도록 할 것
sql과 orm 중에, ORM(Object Relational Mapping)을 사용하기로 했다.
그 이유는 sql 질의를 잘 몰라도, 파이썬 문법만으로 데이터 베이스관리가 가능하기 때문에, 추가적인 학습이 필요하지 않은 orm을 선택했다.