티스토리 뷰
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 으로 접속 하면 다음 사이트로 접속이 되게 해봐요.
'Python' 카테고리의 다른 글
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) static 리소스 활용 (0) | 2020.05.15 |
---|---|
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) errorhandler, abort (0) | 2020.05.15 |
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) Route, URL (0) | 2020.05.09 |
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) URL <variable_name> (0) | 2020.05.09 |
[웹 앱프로그래밍] 파이썬 플라스크(Python Flask) Request get parameter(HTTP method GET, POST) (2) | 2020.05.02 |
- Total
- Today
- Yesterday
- 플라스크
- Visual Studio
- GCP
- docker
- HTML
- Cloud
- mysql
- 자바스크립트
- 웹앱프로그래밍
- nginx
- Java
- 도커
- oracle
- 리눅스
- pythonanywhere
- 부트스트랩
- 웹앱 프로그래밍
- javascript
- GIT
- github
- python
- flask
- 자바
- 웹앱
- 파이썬
- Hello World
- WEB
- DB
- 오라클
- 클라우드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |