04. 라우팅(Route)
1. 라우팅
라우팅(Route)은 URL 경로와 특정 함수 간의 매핑을 정의하는 작업입니다. Flask에서는 @app.route() 데코레이터를 사용하여 특정 URL 경로에 대한 요청이 발생했을 때 어떤 함수를 실행할지 지정합니다. 이를 통해 사용자가 웹 브라우저에서 요청한 URL에 맞는 결과를 반환할 수 있습니다.
예제 코드: app.py
from flask import Flask
app = Flask(__name__)
# 기본 경로에 대한 라우트
@app.route('/')
def home():
return 'Hello, this is the home page!'
# 다른 경로에 대한 라우트
# 127.0.0.1:5000/about
@app.route('/about')
def about():
return 'This is the about page.'
# 127.0.0.1:5000/project
@app.route('/project')
def project():
return 'The project page'
# 동적인 URL 파라미터 사용
@app.route('/user/<username>')
def show_user_profile(username):
return f'User: {username}'
# URL에 변수 및 타입 지정
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post ID: {post_id}'
설명:
- @app.route('/') : 기본 경로인 /에 대한 요청을 처리하는 라우팅입니다. 즉, 홈페이지 요청 시 home() 함수가 실행됩니다.
- @app.route('/about') : /about 경로에 대한 요청을 처리합니다.
- @app.route('/project') : /project 경로에 대한 요청을 처리합니다.
- @app.route('/user/<username>') : URL에서 <username>은 동적인 값으로, 사용자가 127.0.0.1:5000/user/john과 같은 경로로 접근하면 john이 username 변수로 전달됩니다.
- @app.route('/post/<int:post_id>') : URL에서 <int:post_id>는 int 타입의 변수로, 숫자 값만 받습니다. 예를 들어 127.0.0.1:5000/post/123에서 post_id는 123이 됩니다.
API END POINT 생성
Flask는 REST API를 간단히 구축할 수 있는 기능을 제공합니다. Flask에서는 CRUD 작업을 쉽게 구현할 수 있습니다:
- Create (POST): 서버에 데이터를 추가할 때
- Read (GET): 서버에서 데이터를 조회할 때
- Update (PUT): 서버에 있는 데이터를 수정할 때
- Delete (DELETE): 서버에 있는 데이터를 삭제할 때
GET 요청 예제
# GET: 데이터를 요청할 때
from flask import jsonify
@app.route("/api/v1/feeds", methods=['GET'])
def get_all_feeds():
# DB에서 불러온다.
data = {
'status': 'success',
'feed': {
"feed1": "data",
"feed2": "data2"
}
}
# python -> dict -> json
return jsonify(data)
설명:
- @app.route("/api/v1/feeds", methods=['GET']) : GET 메소드를 사용하여 /api/v1/feeds 경로에 대한 요청을 처리합니다. 이 경로는 데이터를 요청하는 API 엔드포인트로, 클라이언트는 데이터를 조회하기 위해 GET 요청을 보냅니다.
- jsonify(data) : 파이썬 딕셔너리를 JSON 형식으로 변환하여 응답을 반환합니다.
다양한 HTTP 메소드 지원
Flask에서는 여러 HTTP 메소드를 처리할 수 있습니다. 기본적으로 GET 요청을 처리하지만, 다른 메소드도 쉽게 추가할 수 있습니다.
@app.route('/submit', methods=['POST', 'GET'])
def submit():
if request.method == 'POST':
return 'POST method.'
else:
return 'GET method.'
설명:
- methods=['POST', 'GET'] : 이 라우트는 POST와 GET 요청을 모두 처리합니다. 클라이언트가 GET 요청을 보내면 GET method.가 반환되고, POST 요청을 보내면 POST method.가 반환됩니다.
요청 보내기
request.json 사용하기
Flask에서 클라이언트가 JSON 데이터를 서버로 전송하는 경우, 이를 파이썬 딕셔너리 형태로 자동으로 변환할 수 있습니다. request.json 또는 request.get_json()을 사용하면 JSON 형식으로 전송된 데이터를 쉽게 처리할 수 있습니다.
요청을 보내는 곳
@app.route('/test')
def user_profile():
url = 'http://localhost:5000/submit'
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, data=data)
return response
요청을 받는 곳
@app.route('/submit', methods=['POST'])
def submit():
data = request.json
key1 = data.get('key1')
key2 = data.get('key2')
return f'Received: key1={key1}, key2={key2}'
설명:
- request.json : 클라이언트가 전송한 JSON 데이터를 파이썬 딕셔너리로 파싱하여 data 변수에 저장합니다.
- data.get('key1') : JSON 데이터에서 key1 값을 가져옵니다.
'Flask' 카테고리의 다른 글
Chapter 1-6 Flask 프로젝트 세팅 (0) | 2025.04.17 |
---|---|
Chapter 1-8 Jinja (Template Engine) (0) | 2025.04.17 |
Chapter 1-5 Flask란? (0) | 2025.04.17 |
Chapter 1-4 Flask 서버 구축을 위한 개발 환경 설정 (0) | 2025.04.17 |
Chapter 1-3_1 파이썬 내장 함수 / 외장 함수 (import) (0) | 2025.04.17 |