반응형
개요
Flask에서 웹 서버의 요청을 처리하는 라우터는 클라이언트(브라우저, API 클라이언트 등)에서 보내는 HTTP 요청을 특정 함수와 연결하는 역할을한다.
라우터는 URL과 HTTP 메서드(GET, POST 등)를 기반으로 동작한다.
🌟 Flask 라우팅 정리
- @app.route('/path', methods=['메서드']) 형태로 URL과 HTTP 메서드 연결.
- Flask는 기본적으로 GET만 허용하므로, 다른 메서드는 methods에 명시해야 함.
- 동적 라우팅(/items/<int:item_id>)을 사용해 특정 리소스를 식별할 수 있음.
GET
@app.route('/items', methods=['GET'])
def get_items():
items = Item.query.all()
return jsonify([{'id': item.id, 'name': item.name} for item in items])
- 클라이언트가 서버에서 리소스를 조회할 때 사용
- URL을 통해 데이터를 전달하고, 서버는 해당 데이터나 페이지를 반환
- 주로 조회, 리스트 출력 등의 용도로 사용
위 코드는 /items URL로 GET 요청이 오면, 데이터베이스에서 모든 항목을 조회해 JSON으로 반환한다.
POST
@app.route('/items', methods=['POST'])
def create_item():
data = request.json
new_item = Item(name=data['name'], description=data['description'])
db.session.add(new_item)
db.session.commit()
return jsonify({'message': 'Item created'}), 201
- 서버에 데이터를 생성할 때 사용
- 클라이언트가 요청 본문(body)에 데이터를 담아 전송하고, 서버는 이를 처리해 새로운 리소스를 생성
- 이 코드는 클라이언트가 새로운 항목을 생성하는 API로, 요청 본문에서 데이터를 읽고 데이터베이스에 추가함
PUT
@app.route('/items/<int:item_id>', methods=['PUT'])
def update_item(item_id):
data = request.json
item = Item.query.get(item_id)
if not item:
return jsonify({'message': 'Item not found'}), 404
item.name = data['name']
item.description = data['description']
db.session.commit()
return jsonify({'message': 'Item updated'})
- 리소스를 전체 수정할 때 사용
- 기존 데이터를 새 데이터로 완전히 덮어씀
- 업데이트 시 모든 필드를 전송해야 함
PATCH
@app.route('/items/<int:item_id>', methods=['PATCH'])
def patch_item(item_id):
data = request.json
item = Item.query.get(item_id)
if not item:
return jsonify({'message': 'Item not found'}), 404
if 'name' in data:
item.name = data['name']
if 'description' in data:
item.description = data['description']
db.session.commit()
return jsonify({'message': 'Item partially updated'})
- 리소스를 부분 수정할 때 사용
- PUT과 비슷하지만, 변경할 데이터만 전송함
- 일부 필드만 수정하고 나머지는 그대로 유지됨
- 클라이언트가 name 또는 description 중 일부만 수정하고 싶을 때 사용
DELETE
@app.route('/items/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):
item = Item.query.get(item_id)
if not item:
return jsonify({'message': 'Item not found'}), 404
db.session.delete(item)
db.session.commit()
return jsonify({'message': 'Item deleted'})
- 리소스를 삭제할 때 사용
- 특정 ID나 조건에 맞는 데이터를 삭제함
여러 메서드를 한 라우터에 설정하는 경우
@app.route('/items', methods=['GET', 'POST'])
def handle_items():
if request.method == 'GET':
return get_items()
elif request.method == 'POST':
return create_item()
- 하나의 URL에서 여러 메서드를 지원할 수도 있다.
- 위와 같이 GET과 POST를 같은 엔드포인트에서 처리 가능
728x90
반응형
'웹(WEB) > 파이썬(Python)' 카테고리의 다른 글
[Python] Flask 클라이언트 PUT, DELETE 요청 처리 (0) | 2025.01.02 |
---|---|
[Python] Flask 클라이언트 POST 요청 처리 (0) | 2025.01.02 |
[Python] Flask 클라이언트 GET 요청 처리 (0) | 2025.01.02 |
[Python] Flask DB 연동 (0) | 2025.01.02 |
[Python] Flask 기본 (0) | 2024.12.31 |