Flask에서 url_for를 사용한 리디렉션 with 파머(2/3)

2025. 4. 22. 14:41·기술블로그-Flask편

Flask에서 url_for를 사용한 리디렉션

url_for 함수는 Flask에서 URL을 동적으로 생성할 수 있는 중요한 도구입니다. 이를 사용하면 함수의 이름을 기반으로 URL을 생성하므로, URL이 변경되더라도 코드 내에서 하드코딩된 URL을 수정할 필요 없이 쉽게 수정할 수 있습니다. 특히 리디렉션에서 유용하게 사용됩니다.

코드 설명

1. 기본 Flask 애플리케이션

from flask import Flask, render_template, url_for, redirect

app = Flask(__name__)

@app.route('/home123')
def home():
    return "Home Page"
  • 홈 페이지 라우트 (/home123): 이 라우트는 /home123 URL에 접근했을 때 "Home Page" 메시지를 반환합니다.

2. 리디렉션 예시 (/go-home)

python
복사
@app.route('/go-home') def go_home(): return redirect('/home123') # 변경된 주소값을 넣어줘야 됨
@app.route('/go-home')
def go_home():
    return redirect('/home123')  # 변경된 주소값을 넣어줘야 됨
  • 리디렉션: /go-home으로 접근하면, 이 라우트는 사용자에게 /home123으로 리디렉션을 합니다. 만약 URL이 변경되면 이 부분도 수동으로 수정해야 합니다.

3. URL 변경에 대한 해결책 (url_for 사용)

@app.route('/go-home')
def go_home():
    return redirect(url_for('home'))  # 함수 이름을 넣으면 URL이 변경되어도 동적으로 처리​
  • url_for 사용: url_for('home')는 home 뷰 함수에 해당하는 URL을 자동으로 생성합니다. 만약 /home123 라우트가 다른 주소로 변경되더라도, url_for('home')를 통해 항상 해당 라우트의 URL을 자동으로 참조할 수 있습니다. 이로 인해 URL을 하드코딩하는 문제를 피할 수 있습니다.

4. 중복된 라우트 정의 (오류)

@app.route('/go-home')
def go_home():
    return redirect(url_for('home'))  # 함수 이름을 넣으면 URL이 변경되어도 동적으로 처리
  • 위의 코드에서 **@app.route('/go-home')**가 두 번 선언되어 있습니다. Flask에서는 라우트가 중복될 수 없습니다. 하나의 라우트만 정의해야 하므로, 중복되는 라우트는 삭제해야 합니다.

수정된 코드

from flask import Flask, render_template, url_for, redirect

app = Flask(__name__)

# 홈 페이지 라우트
@app.route('/home123')
def home():
    return "Home Page"

# go-home 페이지 라우트 (리디렉션)
@app.route('/go-home')
def go_home():
    return redirect(url_for('home'))  # url_for를 사용하여 동적으로 리디렉션

# 로그아웃 페이지 라우트 (리디렉션)
@app.route('/logout-home') 
def logout_home():
    return redirect(url_for('home'))  # url_for를 사용하여 동적으로 리디렉션

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

HTML 템플릿 (index.html)

이 템플릿은 사용자에게 동적으로 표시할 정보를 출력합니다. 예를 들어, name_index라는 변수를 받아서 출력합니다.

 
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>
  <body>
    <h1>안녕하세요, 반가워요, 또 만났네요 {{ name_index }}</h1>
  </body>
</html>
  • {{ name_index }}는 Flask에서 render_template를 사용할 때 전달된 변수 name_index의 값을 출력합니다. 예를 들어, 라우트에서 name_index 값을 넘겨주면 이 값이 템플릿에 출력됩니다.

요약

  • url_for: URL을 하드코딩하지 않고, Flask의 라우트 함수 이름을 기반으로 동적으로 URL을 생성합니다. 이를 통해 URL이 변경되더라도 코드 내에서 자동으로 반영됩니다.
  • 리디렉션: redirect()와 url_for()를 사용하여 다른 URL로 리디렉션할 수 있으며, URL이 변경되더라도 리디렉션 코드에서 변경을 최소화할 수 있습니다.
  • 중복된 라우트 정의 제거: 동일한 URL에 대해 중복된 라우트 정의는 에러를 발생시킬 수 있습니다. 하나의 URL에 대해 한 개의 라우트만 정의해야 합니다.
 
 
 
 

 

 
 
검색
 
ChatGPT는 실수를 할 수 있습니다. 중요한 정보는 재차 확인하세요.

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

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

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Flask에서 url_for를 사용한 리디렉션 with 파머(2/3)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.