2017. 10. 13.

[Python] Flask URL Building - url_for()

Flask URL 만들기(Building)

url_for() 함수는 함수 이름으로 된 종단점(endpoint)의 URL을 생성합니다. 그리고 변수 규칙에 따라서 인자도 전달할 수 있습니다. 그래서 함수명을 첫번째 인자로, 하나 혹은 그 이상의 키워드 인자를 전달하면, 변수 규칙에 맞추어 이에 해당하는 URL을 생성해줍니다.


다음 script는 url_for() 함수를 어떻게 사용하는지 잘 보여줍니다.


from flask import Flask, redirect, url_for
app = Flask(__name__)

@app.route('/admin')
def hello_admin():
  return 'Hello Admin'

@app.route('/guest/<guest>')
def hello_guest(guest):
  return 'Hello %s as Guest' % guest

@app.route('/user/<name>')
def hello_user(name):
  if name =='admin':
     return redirect(url_for('hello_admin'))
  else:
     return redirect(url_for('hello_guest', guest = name))

if __name__ == '__main__':
  app.run(debug = True)


위의 스크립트의 hello_user(name) 함수는 URL에서 인자의 값을 전달받습니다.


hello_user(name) 함수는 먼저 전달받은 인자가 ‘admin’과 일치하는지 확인합니다. 만약 일치한다면 애플리케이션은 url_for()를 사용하여, hello_admin() 함수로 리다이렉트(redirect)합니다. 일치하지 않는다면, 전달받은 name 인자를 guest 매개변수로 사용하여 hello_guest() 함수로 리다이렉트합니다.


위의 코드를 저장하여 실행합니다. 그리고 웹 브라우저를 열어 다음 URL을 입력합니다.


http://localhost:5000/user/admin


결과는 쉽게 예상할 수 있습니다. 코드는 주어진 URL을 라우팅합니다. 우리가 정해둔 라우팅에 따라 hello_user(name)이 호출될 것입니다. URL의 name을 확인하여 리다이렉트합니다. name은 admin이기 때문에 hello_admin()으로 리타이렉트됩니다. 결국 ‘Hello Admin’이 반환됩니다. 우리는 브라우저에서 Hello Admin을 볼 수 있습니다.


이제 다른 URL을 입력해보겠습니다.


http://localhost:5000/user/mooneegee


결과를 예상해보겠습니다. 전달된 URL은 라우팅되어 hello_user(name)을 호츨할 것입니다. mooneegee는 이 함수의 인자로 전달됩니다. 그 다음 hello_guest() 함수로 리다이텍트되고, 인자로 mooneegee를 전달합니다. 마직막으로 ‘Hello mooneegee as Guest’반환합니다. 우리는 브라우저에서 이 반환된 문자열을 볼 수 있습니다.

다음에 다룰 내용은 무엇인가요?

WWW(월드 와이드 웹)에서 데이터를 주고 받는 바탕인 Http 프로토콜과 이와 관련된 Flask API를 살펴볼 것입니다.

댓글 없음:

댓글 쓰기