- Host PC :
Ubuntu 20.04.6 LTS
- Docker Image :
httpd:2.4
- Docker Official Image
AttributeError: 'Flask' object has no attribute 'before_first_request'
- 원인 :
Flask 2.3.x
버전부터 코드가 바뀌었다.@app.before_first_request
가 삭제 변경되었다.
Flask
버전 : Flask 3.0.2
( 현재 : 2024-03-19 )따라서, 최신버전의
Flask
를 설치하고 구버전의Flask
코드를 쓰면 오류가 발생
- 기존에 잘 작동하던
Flask
버전은2.1.1
수정 전 : 데코레이터로
@before_first_request
실행
openslide
의 deepzoom
을 동작시키는 코드@app.before_first_request
는 flask
애플리케이션을 첫 번째 HTTP 요청이 처리되기 전에 한 번만 실행되어야 하는 초기화 코드이다.@app.before_first_request
def _setup():
app.basedir = os.path.abspath(app.config['SLIDE_DIR'][0])
config_map = {
'DEEPZOOM_TILE_SIZE': 'tile_size',
'DEEPZOOM_OVERLAP': 'overlap',
'DEEPZOOM_LIMIT_BOUNDS': 'limit_bounds',
}
opts = [app.config[k] for k in config_map]
opts = tuple(opts)
app.cache = _SlideCache(app.config['SLIDE_CACHE_SIZE'], opts)
수정 후 : 데코레이터 삭제 후
app
의 매서드로_setup
함수 실행
app.before_request(_setup)
def _setup():
app.basedir = os.path.abspath(app.config['SLIDE_DIR'][0])
config_map = {
'DEEPZOOM_TILE_SIZE': 'tile_size',
'DEEPZOOM_OVERLAP': 'overlap',
'DEEPZOOM_LIMIT_BOUNDS': 'limit_bounds',
}
opts = [app.config[k] for k in config_map]
opts = tuple(opts)
app.cache = _SlideCache(app.config['SLIDE_CACHE_SIZE'], opts)
app.before_request(_setup)