2. Routing
구조화된 URL
route 데코레이터는 함수를 URL에 바인딩(binding)하여 쉽게 사용 가능
2.1 정적 라우팅
루트(root) 경로
/ leading slash(리딩 슬래쉬)이며 가장 기본 루트
localhost:5000의 루트(url 뒤 /, /는 생략 가능.)로 접속하면 route데코레이터의서 / 에 바인딩된 함수가 실행
정의하지 않으면 첫 화면은 Not Found로 나온다.
@app.route('/')
def index():
return 'Index Page'
하위 경로
하단에는 루트 경로에서 /about 하위경로 정의.
/about으로 들어가면 about 함수가 실행됨
@app.route('/about')
def about():
return '홈의 하위경로'
trailing slash
맨끝에 trailing slash(마지막에 / 로 끝나는 경우)갖는 경우 /경로/에서 '/'를 끝에 존재 유무와 상관없이 동작함
하지만 맨끝에 trailing slash없이 엑세스 하면 표준URL로 리다이렉션함.
@app.route('/about/')
def about():
return '홈의 하위경로'
지정하지 않은 경로
trailing slash 정의하지 않았는데 trailing slash를 붙이는 경우 Not Found
이렇게 함으로써 검색엔진이 동일한 페이지 2번 인뎅식 하는 것을 방지
지정하지 않은 경로로 이동시 서버에서 해당 요청한 URL을 찾을 수 없다며 Not Found페이지가 나옴
적용 순서
동일한 경로에 설정한 경우 먼저 정의한 것이 적용됨
@app.route("/about/<name>/")
def admin(name):
return 'About %s' %name
@app.route('/about/<int:user_id>')
def get_message(user_id):
return 'Your ID is %d' % user_id
2.2 동적 라우팅
지정한 URL외에도 사용자가 입력한 경로로 동적 라우팅이 가능하다
(1) 변수 <변수명>
동적으로 사용할 변수를 <변수명> 로 지정한다
바인딩된 함수의 키워드 인자로 변수가 전달된다. 이 전달된 변수를 원하는 곳에 적용한다.
해당 예시에서는 리턴하여 바로 적용되었는지 확인하는 예제로 there을 입력하자 출력으로 Hello there가 나온다.
@app.route("/<name>")
def user(name):
return 'Hello ' + name
@app.route("/about/<name>/")
def admin(name):
return 'About ' + name
변수 자료형 지정 <자료형: 변수명 > (converter라 불림)
문자열인 경우 Your ID is 0001로 나온다. 하지만 정수형으로 user_id를 받아서 포맷에 넘기게 되어 1로 나옴.
- string hi (기본값)
- int 2
- float 3.14
- path /route
- uuid
from markupsafe import escape
@app.route('/user/<int:user_id>')
def user_id(user_id):
return 'Your ID is %d' % user_id
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
return f'Subpath {escape(subpath)}'
Formatting 포맷
기본적 입력값은 문자열(string)
@app.route("/about/<name>/")
def admin(name):
return 'About ' + name
@app.route("/about/<name>/")
def admin(name):
return 'About %s' %name
위의 두 코드는 동일한 출력을 나타낸다. 입력 받은 문자를 포맷팅하여 표현 할 수 있다.
- %s 문자열
- %d 숫자
출처: https://flask.palletsprojects.com/en/2.0.x/quickstart/
'CS > Web' 카테고리의 다른 글
[BE-Django] model (0) | 2021.12.06 |
---|---|
[BE-Flask] 4. HTTP (0) | 2021.11.09 |
[BE-Flask] 3. 플라스크 템플릿 (0) | 2021.11.08 |
[BE-Flask] JWT(Json Web Token) (0) | 2021.11.05 |
[BE - Flask] 1 Flask 시작하기: 다운로드, 실행 (0) | 2021.11.03 |