CS/Web

[BE - Flask] 2. 라우팅(Routing)

뚱요 2021. 11. 4. 12:00
반응형

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/

 

Quickstart — Flask Documentation (2.0.x)

For web applications it’s crucial to react to the data a client sends to the server. In Flask this information is provided by the global request object. If you have some experience with Python you might be wondering how that object can be global and how

flask.palletsprojects.com

 

반응형

'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