티스토리 뷰
이전 글에서 우리는 HTTP request 와 method 에 대해서 알아 봤습니다. app.route에서 URL을 전달 받고 method를 받아 처리 했습니다. URL에 대해 조금 더 알아 보도록 하겠습니다.
route 에서 URL을 전달 받을 때 /test 와 /test/ 는 다릅니다. 아래 예제를 보시죠.
@app.route('/test')
def test1():
return 'test1'
@app.route('/test/')
def test2():
return 'test2'
위와 같이 만들고 웹브라우저에서 요청을
이렇게 다르다는 것을 알 수 있습니다.
URL의 끝에 붙이는 / 를 트레일링 슬래시(Trailing Slash)라고 합니다. 리눅스를 배웠다면 끝에 / 가 붙는 것은 디렉토리이고 / 가 없는것은 파일을 나타 냅니다. 그래서 / 는 경로라고 생각 하는것이 맞다고 생각합니다. 그럼 파일에 접근 하는 것은 웹서버에서 /index.html 이런식으로 붙겠죠. 보통 웹서버에서 제일 먼저 찾는 파일은 웹서버에서 웰컴(welcome)파일은 index.html 입니다. 생략 하더라도 웹서버에서 index.html 이 있는지 확인 하고 있으면 index.html 파일을 보여 주게 됩니다.(메인 페이지를 index.html 이라고 하는 이유이기도 하죠)
그럼 우리가 hello world! 라고 만들었던 app.route('/') 에서 보면 브라우저로 접속할 때 http://127.0.0.1:5000 이렇게 접속 하더라도 / 로 들어 가는 이유는 두가지가 될 수 있습니다. 이전 글에서 보면 / 는 생략이 가능하다고 했지만 생략해도 접속이 가능하다는거지 HTTP 스펙상으로는 Request에는 경로를 생략 하면 안됩니다. (위키 - URL 참조)
명시를 해주는 것이 페이지 속도면에서는 이득이 있다고는 합니다.
그러면 저 / 는 언제 붙게 되는지는 크롬 웹브라우저 개발자 도구에서 확인 해봅시다.
서버로 보낼때 브라우저에서는 끝에 /를 붙여서 보내는것을 알 수 있네요. 즉 브라우저에서 / 를 붙여서 보낸다라고 생각이 듭니다. 그래서 생략을 하더라도 / 로 보내기 때문에 우리가 만든 app.route('/')로 들어 오는 것을 확인할 수 있습니다.
그런데 우리가 테스트 하고 있는 /test 와 /test/ 는 따로 받을 수 있도록 만들었습니다.
접속해서 개발자 도구로 확인 봅시다.
따로 확실히 구분이 됩니다. 두개를 만들었기 때문에 각각 test1과 test2 각각 접속이 됩니다.
그러면 그전에 만든 /hello 로 접속을 하면 접속이 당연히 되겠지만 /hello/ 로 접속을 해봅시다.
페이지를 찾을수 없다고 나오네요. 끝에 / 를 붙이냐 안붙이냐에 따라 접속이 되고 안되고의 큰 차이를 볼수 있습니다.
그럼 이제 반대로 app.route('/hello') 를 app.route('/hello/') 로 바꾸고 테스트를 해보죠.
/hello/ 로 접속을 해보면 당연히 있으니까 정삭적으로 접속이 됩니다.
그런데 /hello 로 접속을 해보면
/hello 로 접속을 했는데 /hello/ 로 바뀌는것을 볼 수 있고 개발자 도구를 들여다 보면 상태 코드가 308 리다이렉트라고 나옵니다. 즉 Flask에서 *리다이렉션(Redirection)을 하는것으로 생각을 할수 있습니다.
Flask의 URL 규칙은 *Werkzeug의 라우팅 모듈을 기반으로 HTTP 스펙을 지킨다고 볼수 있습니다.
Flask 에서 이 용어들은 조금 알아둬야 할 필요가 있습니다.
* 리다이렉션(Redirection): 지정위치로 이동
* Werkzeug : 독일어로 공구(Toolkit)라는 뜻을 가지며 *WSGI의 Toolkit(request, response, utility 등)
* WSGI: Web Server Gateway Interface의 약자 입니다. Python 에서 웹서버와 애플리케이션간의 인터페이스(데이터 통로)
'Python' 카테고리의 다른 글
파이썬 플라스크(Python Flask) errorhandler, abort (0) | 2020.05.15 |
---|---|
파이썬 플라스크(Python Flask) redirect, url_for (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 |
파이썬 플라스크(Python Flask) 디렉토리(폴더) 구성 (1) | 2020.05.02 |
- Total
- Today
- Yesterday
- 오라클
- Visual Studio
- DB
- 웹앱 프로그래밍
- 자바
- mysql
- HTML
- 웹앱
- 부트스트랩
- 도커
- github
- docker
- 플라스크
- 리눅스
- Cloud
- javascript
- 웹앱프로그래밍
- 파이썬
- GIT
- GCP
- WEB
- pythonanywhere
- 클라우드
- flask
- Java
- 자바스크립트
- nginx
- python
- Hello World
- oracle
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |