본문 바로가기

기초공부/WEB

[Flask]빠르게 시작하기 - URL 생성

URL 생성

라우팅이 설정된 함수에 대한 URL을 사용하기 위하여 url_for() 메서드를 사용할 수 있다. 이 함수는 인자로 함수의 이름과 URL 변수 이름을 인자로 받는다. 알 수 없는 인자는 쿼리 인자로 URL에 덧붙여진다.예시는 아래와 같다

from flask import Flask, url_for

app = Flask(__name__)
@app.route('/')
def index(): pass

@app.route('/login')
def login(): pass

@app.route('/user/<username>')
def profile(username): pass

with app.test_request_context():
    print (url_for('index')) # index 함수과 연관된 URL 출력
    print (url_for('login')) # login 함수와 연관된 URL 출력
    print (url_for('login', next='/'))
# login 함수와 연관된 URL을 출력하되 next라는 변수에는 '/' 값을 대입할 것
# 값이 없으므로 쿼리 인자로 URL에 덧붙여 출력된다
    print (url_for('profile', username='John Doe'))
# profile 함수와 연관된 URL을 출력하되 username라는 변수에는 'John Doe'를 대입할 것

결과는 다음과 같이 출력된다



다른 예시는 다음과 같다

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

@app.route('/admin') 
def hello_admin():
   return 'Hello Admin'
# 주소가 /admin일 경우 'Hello Admin'을 반환한다

@app.route('/guest/<guest>')
def hello_guest(guest):
   return 'Hello %s as Guest' % guest
# 주소가 /guest/<guest>일 경우 'Hello %s as Guest' % guest을 반환한다

@app.route('/user/<name>') # 주소가 '/user/<name>'일 경우
def hello_user(name):
   if name =='admin':
      return redirect(url_for('hello_admin'))
# 변수 name의 값이 'admin'일 경우, 함수 hello_admin()의 url을 리다이렉트한다
   else:
      return redirect(url_for('hello_guest', guest = name))
# 변수 name의 값이 'admin'이 아닐 경우, 함수 hello_quest(name)의 url을 리다이렉트 한다

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


주소가 /admin일 경우


주소가 /guest/<guest>일 경우


주소가 '/user/<name>'일 경우

>