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 와 맵핑된 요청을 실행하고 응답 결과를 확인한다.
'Launguage > Python' 카테고리의 다른 글
[Python][Flask] 03. API Test 및 문서화 - Swagger (0) | 2022.08.14 |
---|---|
[Python][Flask] 02. Route 구조설계 - Restx (0) | 2022.08.13 |
[Python][Flask] 01. 기본 라우트 & 순환참조 & Blueprint (0) | 2022.07.31 |
[Python][Flask] 00. 설치 & 기본앱 실행 (0) | 2022.07.30 |
[Python][기본 02] virtualenv 를 통한 개발환경 구성 (0) | 2022.07.30 |