[Flask] 'before_first_request' 오류 flask 버전

제이브로·2024년 3월 19일
0

Python

목록 보기
14/17
post-thumbnail

1. Environment

  • Host PC : Ubuntu 20.04.6 LTS
  • Docker Image : httpd:2.4 - Docker Official Image

2. 'before_first_request' 오류

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

3. 수정 전 code

수정 전 : 데코레이터로 @before_first_request 실행

  • openslidedeepzoom을 동작시키는 코드
  • @app.before_first_requestflask 애플리케이션을 첫 번째 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)

4. 수정 후

수정 후 : 데코레이터 삭제 후 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)

5. References

  1. community.render.com
  2. stackoverflow
profile
기록하지 않으면 기록되지 않는다.

0개의 댓글