본문으로 바로가기

Flask 의 Blueprint 를 Controller 와 연결하기

/controllers/users.py 파일을 아래와 같이 작성합니다.

기본적인 CRUD 에 대한 응답결과를 반환하는 Contoller Method 의 예시이며, 실제 데이터를 연동하는 Model 또는 Service Layer를 제외한 테스트 코드 정도로 보면 무방하겠다.

상태코드는 성공결과를 기준으로 리소스 생성(200), 리소스 삭제(204), 나머지는 200(OK) 로 응답하며, 리소스 생성 및 수정 시에는 응답헤더를 통해 생성 또는 수정된 Resource 의 ID와 해당 리소스에 접근하기 위한 Endpoint 를 반환한다.

# /controllers/users.py

from flask import Blueprint

bp_user = Blueprint('users', __name__, url_prefix='/users')


@bp_user.route('/', methods=['GET'])
def index():
    return 'index', 200


@bp_user.route('/', methods=['POST'])
def create():
    created = 2
    return 'create', 201, {
        'x-resource-id': created,
        'x-resource-uri': '/api/users/{}'.format(created)
    }


@bp_user.route('/<id>', methods=['PUT'])
def update(id):
    return 'update', 200, {
        'x-resource-id': id,
        'x-resource-uri': '/api/users/{}'.format(id)
    }


@bp_user.route('/<id>', methods=['DELETE'])
def delete(id):
    return 'delete', 204

/routes/api/__init__.py

해당 파일에서는 위에 생성한 Controller 를 Blueprint 에 바인딩 하는 코드이다.

# /routes/api/__init__.py

from flask import Blueprint

from controllers.users import bp_user

bind_api = Blueprint('api', __name__, url_prefix='/api')

bind_api.register_blueprint(bp_user)

/bootstrap/__init__.py

마지막으로 앱 실행시 Flask 인스턴스를 생성하는 create_app() 메소드에 위에서 작성한 routes/api 를 등록한다.

# /bootstrap/__init__.py

from flask import Flask


def create_app():
    from routes.api import bind_api
    app = Flask(__name__)
    app.register_blueprint(bind_api)
    return app

 

/app.py

# /app.py

from flask import Flask

app = Flask(__name__)


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

 

앱을 실행하고, GET, POST, PUT, DELETE 와 맵핑된 요청을 실행하고 응답 결과를 확인한다.