플라스크를 이용해서 서버를 생성 시, URL에 변수를 추가하는 방법을 알아보았다.

<변수>로 데코레이터 내부에 입력해주고, 함수에 파라미터로 변수를 지정해서 사용할 수 있다.

https://blog.kakaocdn.net/dn/cFvIED/btrFuwmaoc5/lNC5VuSJryGW3RVTN8Xme1/img.png

@app.route('/username/<name>')
def night_world(name):
    return f"Hello,{name}"

플라스크로 HTML 랜더링하기

return 반환문에 html 태그를 삽입할 수 있다.

https://blog.kakaocdn.net/dn/cmsrR1/btrFz3P1UCW/PLueROchmst6TRIb4TXU0k/img.png

@app.route('/')
def hello_world():
    return '<h1>Hello, World!</h1>'

다른 태그도 연달아 입력이 가능하다.

https://blog.kakaocdn.net/dn/Pbvoy/btrFzxjPonn/PKiaVcd42AxXp93DxjpzQk/img.png

@app.route('/')
def hello_world():
    return'<h1>Hello, World!</h1><p>This is a paragraph</p>'

앞서 배운 데코레이션을 통해 html 코드를 입힐 수 있는 데코레이터를 만들어보았다.

볼드체와, 이탈릭, 밑줄을 추가할 수 있는 데코레이터이다.

https://blog.kakaocdn.net/dn/8iopC/btrFzEC18o3/9xPk3A7YH6k461ZNqVAVZ0/img.png

def make_bold(function) :
    def wrapper_function() :
        return "<b>" + function() + "</b>"
    return wrapper_function

def make_emphasis(function) :
    def wrapper_function() :
        return "<em>" + function() + "</em>"
    return wrapper_function

def make_underlined(function) :
    def wrapper_function() :
        return "<u>" + function() + "</u>"
    return wrapper_function

@app.route('/')
@make_bold
@make_emphasis
@make_underlined
def hello_world():
    return "Hi!"

데코레이터의 파라미터를 다른 함수의 파라미터로 연결시키기 위해서는 *args와 **kwargs를 활용할 수 있다.

class User:
    def __init__(self,name):
        self.name = name
        self.is_logged_in = False

def is_authenticated_decorator(function) :
    def wrapper(*args) :
        if args[0].is_logged_in == True :
            function(args[0])
    return wrapper

@is_authenticated_decorator
def created_blog_post(user) :
    print(f"This is {user.name}'s new blog post.")

new_user = User("Chul")
new_user.is_logged_in = True

created_blog_post(new_user)

# 결과
This is Chul's new blog post.

마지막으로 한참 전에 만들었더 숫자 업다운 게임을 입혀보았다.

from flask import Flask
import random
app = Flask(__name__)

random_number = random.randint(0,9)
print(random_number)

@app.route('/')
def hello_world():
    return '<h1>0에서 9까지 숫자를 맞춰보세요.</h1>' \\
           ''

@app.route('/<int:guess>')
def guess_number(guess):
    if guess < random_number :
        return '<h1>너무 작아요..</h1>' \\
               ''
    elif guess > random_number :
        return '<h1>너무 큰걸!</h1>' \\
               ''
    else :
        return '<h1>나를 찾았구나!</h1>' \\
               ''

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