티스토리 뷰

728x90

Flask에서 페이지 이동에 대해 알아 봅니다. Flask 에서 페이지 이동에는 제목과 같이 redirect, url_for 등 이 있습니다.

자바스크립트에서 페이지 이동시킬때 location.href='이동할 페이지' 같다라고 볼 수 있습니다. 보통 리다이렉션이라고 부릅니다. Flask 와 javascript 다른 점은 코드도 다르지만 클라이언트에서 리다이렉션이 되느냐 서버에서 리다이렉션이 되느냐의 차이로 볼 수 있습니다.

먼저 자바스크립트 location.href 로 리다이렉션을 시켜 봅시다.

templates 폴더 안에 naver.html 이라는 파일을 생성 하고 아래 코드를 입력 합니다.

<!DOCTYPE html>
<html>
<body>
<script>
    location.href="https://www.naver.com/";
</script>
</body>
</html>

app.py 파일에 app.route 를 하나 추가 합니다.

@app.route('/naver')
def naver():
    return render_template("naver.html")

Flask 를 실행 해서 웹브라우저에 http://127.0.0.1:5000/naver 라고 입력 하면 네이버 사이트로 이동이 됩니다.

Flask에서 리다이렉션을 해봅시다.

app.py  파일에 redirect를 import 하고 app.route 를 하나 추가 합니다.

from flask import Flask, request, render_template, redirect

@app.route('/daum')
def daum():
    return redirect("https://www.daum.net/")

Flask 를 실행 해서 웹브라우저에 http://127.0.0.1:5000/daum 이라고 입력 하면 다음 사이트로 이동이 됩니다.

이렇게 바로 페이지 이동이 되는 것을 확인 했습니다.

URL로 페이지를 이동시키는 redirect는 외부 내부 URL을 알면 리다이렉션을 할수 있었습니다. 자바스크립트에서도 location.href="https://www.daum.net/" 이나 우리가 만든 location.href="/daum" 으로 이동을 할수 있겠죠?

 

지금은 app.py 내에서 사용 하지만 나중에 jinja2 템플릿을 배우게 되면 html 코드 내에서 프로그래밍 코드를 작성 할수 있게 되는데 html 안에 내용들을 동적(Dynamic)이게 만들수 있습니다. 이때 html에서 이 정적(Static)인 주소인 경우(하드코딩이라고도 하죠) https://www.daum.net/ 경우는 문제 없지만 우리가 만든 /daum의 경우 app.route 의 주소가 변경 되면 또 html에서도 수정을 해줘야 합니다. 만약에 html에 수정해야할 주소가 많다면 아주 비효율적이겠죠. 이걸 해결 하기 위해 동적(Dynamic)으로 변경이 될수 있게 해야 되는데 Flask에서는 내부 app.route에 연결된 함수 이름으로 app.route 의 URL을 받아올 수 있습니다. url_for() 를 사용 하면 되는데요. 그러면 아무리 app.route 의 URL이 변경 되더도 함수 이름만 바꾸지 않으면 됩니다.

/daum 이 /kakao로 변경이 되더라도 함수이름은 그대로daum을 쓰면 되겠죠.

 

url_for('daum') 이렇게 하고 @app.route('/daum') 을 /kakao로 변경 해서 테스트 해봅니다.

app.test_request_context() 로 테스트 해볼수 있습니다. url_for를 import 에 추가 하고

app.test_request_context() 로 daum 을  출력 해봅시다. 코드는 다음과 같습니다.

 

from flask import Flask, request, render_template, redirect, url_for

@app.route('/daum')
def daum():
    return redirect("https://www.daum.net/")

if __name__ == '__main__':
    with app.test_request_context():
        print(url_for('daum'))

    app.run(debug=True)

기존 소스에 추가한 내용입니다.

Flask를 시작 하면 print(url_for('daum')) 여기서 daum함수의 URL을 터미널에 출력 해줍니다.

위 소스에서

@app.route('/daum')을 @app.route('/kakao') 로 변경해보면 

 

변경된 URL을 그대로 가져 오는것을 볼수 있습니다.

조금 응용을 해보면 url_test 라는 route를 만들고 url_for 를 이용해서 리다이렉션을 시켜 볼게요.

@app.route('/urltest')
def url_test():
    return redirect(url_for('daum'))

위 코드를 추가해서 웹 브라우저에 urltest로 접속을 해보면 아무리 app.route 의 주소가 변경이 되더라도 다음 사이트로 접속이 되는것을 볼수 있습니다.  daum() 함수 안에서 daum.net을 리다이렉트를 시키기 때문이겠죠.

 

만약 html에서 리소스(이미지, js, css등) 을 사용 하게 되는데 Flask에서 리소스 위치는 static 폴더를 생성해서 static안에 리소스 파일들이 존재 하겠죠. url_for는 다음과 같이 사용할 수 있습니다.

url_for('static', filename='style.css') 

즉, static/style.css 에 위치하고 있는 리소스 주소를 받아 올수 있게 됩니다.

 

위에서 다뤄본 변수와 urltest를 참고해서 웹브라우저에 /move/naver 로 접속 하면 네이버 사이트로 접속이 되고 /move/daum 으로 접속 하면 다음 사이트로 접속이 되게 해봐요.

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함