Flask에서 url_for와 라우트 사용 with 파머(1/3)

2025. 4. 22. 14:38·기술블로그

Flask에서 url_for와 라우트 사용

Flask 애플리케이션에서 **url_for**와 라우트 설정의 역할을 설명하는 코드입니다. 이 코드는 여러 가지 라우트를 설정하고 url_for을 사용하여 동적으로 URL을 생성하는 방법을 보여줍니다.

전체 코드

from flask import Flask, render_template, url_for

app = Flask(__name__)  # Flask 애플리케이션 객체 생성

# 기본 홈 라우트
@app.route('/')
def index():
    return "안녕하세요, 반가워요, 또 만났네요"

# 여러 메서드를 처리하는 라우트 예시
@app.get("/hello")
@app.post("/hello")
def hello():
    return "방문해주셔서 감사합니다."

# /hello 엔드포인트에 GET과 POST 요청을 처리하는 라우트
@app.route('/hello', methods=['GET', 'POST'], endpoint="hello-endpoint")
def hello():
    return "방문해주셔서 감사합니다."

# 동적 URL 처리 예시
@app.route('/hello/<int:name>', methods=['GET', 'POST'], endpoint="hello-endpoint")
def hello(name):
    return f"방문해주셔서 감사합니다. {name}"

# 이름을 받아서 템플릿에 전달하는 라우트
@app.route("/name/<name>")
def show_name(name):
    return render_template("index.html", name_index=name)

# URL을 동적으로 생성하여 테스트하는 부분
with app.test_request_context():  # 가짜 요청을 보내기 위해 사용
    print(url_for("index"))  # '/' 출력
    print(url_for('hello-endpoint', name="12345"))  # '/hello/12345' 출력

if __name__ == '__main__':
    app.run(debug=True)

주요 부분 설명

1. 기본 홈 라우트 (/)

@app.route('/')
def index():
    return "안녕하세요, 반가워요, 또 만났네요"
  • 라우트 설명: 애플리케이션의 홈 페이지에 대한 라우트입니다. 사용자가 / URL로 접속하면 이 함수가 호출되어 "안녕하세요, 반가워요, 또 만났네요"라는 메시지를 반환합니다.

2. 여러 메서드 처리 예시 (@app.get, @app.post)

@app.get("/hello")
@app.post("/hello")
def hello():
    return "방문해주셔서 감사합니다."
  • 라우트 설명: 이 라우트는 GET과 POST 메서드 모두에 대응하는 라우트입니다. /hello URL에 대해 GET 요청 또는 POST 요청이 들어오면, "방문해주셔서 감사합니다."라는 메시지를 반환합니다.
  • Flask 2.0에서 사용 가능: Flask 2.0 이상에서는 @app.get()과 @app.post() 데코레이터를 사용하여 HTTP 메서드별 라우트를 지정할 수 있습니다.

3. URL 매핑 (@app.route)

@app.route('/hello', methods=['GET', 'POST'], endpoint="hello-endpoint")
def hello():
    return "방문해주셔서 감사합니다."
  • 라우트 설명: 이 라우트는 /hello URL에 대해 GET과 POST 메서드를 처리합니다. 해당 URL로 요청이 오면 "방문해주셔서 감사합니다."라는 메시지를 반환합니다.
  • endpoint: 이 속성은 Flask 내부에서 URL을 처리하는 함수의 고유 이름을 정의합니다. url_for('hello-endpoint')와 같이 이 엔드포인트를 참조할 수 있습니다.

4. 동적 URL 처리

@app.route('/hello/<int:name>', methods=['GET', 'POST'], endpoint="hello-endpoint")
def hello(name):
    return f"방문해주셔서 감사합니다. {name}"
  • 동적 URL: <int:name>는 동적 변수로, URL에서 name 부분을 정수값으로 받아올 수 있습니다.
  • 예를 들어, /hello/12345로 요청을 보내면, name은 12345가 되어, "방문해주셔서 감사합니다. 12345"라는 메시지를 반환합니다.

5. render_template를 사용한 템플릿 렌더링

@app.route("/name/<name>")
def show_name(name):
    return render_template("index.html", name_index=name)
  • render_template: 이 함수는 index.html 템플릿을 렌더링하고, name_index라는 변수를 템플릿에 전달합니다.
  • 템플릿에서 name_index를 사용하여 전달된 name 값을 출력할 수 있습니다.

6. url_for 함수 사용

with app.test_request_context():
    print(url_for("index"))  # '/'
    print(url_for('hello-endpoint', name="12345"))  # '/hello/12345'
  • url_for: 이 함수는 라우트에 대한 URL을 동적으로 생성합니다.
    • url_for("index")는 index 함수가 매핑된 URL을 반환합니다. 이 경우 '/'가 반환됩니다.
    • url_for('hello-endpoint', name="12345")는 hello-endpoint로 정의된 URL을 생성하고, name 변수에 "12345" 값을 넣어서 /hello/12345 URL을 반환합니다.

7. HTML 파일 예시 (index.html)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Show Name</title>
  </head>
  <body>
    <h1>Name : {{ name_index }}</h1>
  </body>
</html>
  • name_index: 이 값은 show_name 라우트에서 전달한 name_index 값을 출력합니다.
  • 예를 들어, URL이 /name/John이면 John이 출력됩니다.

결론

  • url_for: Flask에서 URL을 동적으로 생성할 수 있게 해주는 중요한 함수입니다. 이를 사용하면 URL을 하드코딩하지 않고, 함수 이름을 기반으로 URL을 생성할 수 있어 유지보수와 코드 재사용성이 좋아집니다.
  • 동적 URL: <int:name>와 같은 동적 URL을 사용하여, URL 경로에서 변수를 받아 다양한 동작을 할 수 있습니다.
  • Flask 라우트: @app.route를 사용하여 URL을 정의하고, 이 URL에 대응하는 뷰 함수를 작성하여 웹 페이지나 API 엔드포인트를 만듭니다.
 
 
 

'기술블로그' 카테고리의 다른 글

Flask에서 애플리케이션에서 동적 라우트와 조건부 템플릿 사용 with 파머(3/3)  (0) 2025.04.22
Flask에서 url_for를 사용한 리디렉션 with 파머(2/3)  (0) 2025.04.22
Flask-Smorest의 응답 처리 방식  (0) 2025.04.18
Flask의 기능 + Blueprint + Flask-Smorest 통한 작업섹션 구분  (0) 2025.04.18
Blueprint 이름은 Flask 내부에서 라우트와 뷰 함수를 구분하는 데 사용된다  (0) 2025.04.18
'기술블로그' 카테고리의 다른 글
  • Flask에서 애플리케이션에서 동적 라우트와 조건부 템플릿 사용 with 파머(3/3)
  • Flask에서 url_for를 사용한 리디렉션 with 파머(2/3)
  • Flask-Smorest의 응답 처리 방식
  • Flask의 기능 + Blueprint + Flask-Smorest 통한 작업섹션 구분
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (472) N
      • Python (31)
      • 프로젝트 (43)
      • 과제 (21)
      • Database (40)
      • 멘토링 (7) N
      • 특강 (18)
      • 기술블로그 (126) N
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (34) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Flask에서 url_for와 라우트 사용 with 파머(1/3)
상단으로

티스토리툴바