인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

HYO JIN Kim님의 프로필 이미지
HYO JIN Kim

작성한 질문수

가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]

flask 다양한 기능: 다양한 데코레이터

섹션 8 flask 다양한 기능: 다양한 데코레이터 before_first_request 문의

해결된 질문

작성

·

103

0

섹션 8 flask 다양한 기능: 다양한 데코레이터

3분 37초

flask_deco.py 파일 실행 시

AttributeError: 'Flask' object has no attribute 'before_first_request'. Did you mean: '_got_first_request'?

라고 에러가 뜹니다.

검색 해 보니 Flask는 2.2.x 이후로 'before_first_request'를 더 이상 사용하지 않는다고 합니다.

before_first_request 는 어떻게 대체가 되는건지... 정보 검색이 어렵습니다.

어떻게 하면 될까요? 도와주세요~

답변 3

0

안녕하세요. 답변 도우미입니다.

이번 기회에 해당 영상도 새로 찍어서 업데이트하였고, 자료도 새로 다시 업데이트하여 업로드하였습니다.

관련 자료와 영상을 보시면 보다 선명히 이해하실 수 있으실 것 같습니다.

그래도 이슈가 있으시면 dream@fun-coding.org 로 메일로 가볍게 이야기해주시면 또 설명 드리겠습니다.

감사합니다.

HYO JIN Kim님의 프로필 이미지
HYO JIN Kim
질문자

넵! 제가 주피터 노트북 파일을 잘 봤어야했는데...
내용 확인하였습니다.!
빠른 업데이트 감사합니다.!^^

0

안녕하세요. 답변 도우미입니다.

말씀하신 부분 다시 확인해보니, 제가 드린 자료에 이미 상세히 버전별 가이드를 넣어놓았습니다. 수업자료에서 다음 강의시 함께 보시는 다음 주피터노트북 파일에 상세히 추가 설명과 예제를 넣어놓았습니다.

7_flask_others.ipynb

괜찮으시면 해당 자료를 꼭 확인해보시면 좋을 것 같습니다. 그래도 이슈가 있으시면 dream@fun-coding.org 로 메일로 가볍게 이야기해주시면 또 설명 드리겠습니다.

 

감사합니다.

0

안녕하세요. 답변 도우미입니다.

우선 불편을 드려 죄송합니다. 관련 부분은 좀더 검토해서, 조만간 자료등으로 업데이트하겠습니다.

Flask 2.2.x 버전 이후로 before_first_request 데코레이터는 더 이상 지원되지 않으며, 해당 기능을 대체하기 위한 새로운 방식이 도입되었습니다. 이 문제를 해결하기 위해서는 기존의 before_first_request를 대체하는 방법을 사용해야 합니다.

before_first_request 대신 before_request를 사용하면 됩니다. before_request는 첫 번째 요청뿐만 아니라, 매 요청 전에 실행되기 때문에 이를 적절히 처리하여 첫 번째 요청에만 실행되도록 코드를 작성할 수 있습니다.

해결 방법:

기존 코드:

from flask import Flask
​
app = Flask(__name__)
​
@app.before_first_request
def initialize():
    print("이 함수는 첫 번째 요청 전에만 실행됩니다.")

대체 코드:

from flask import Flask
​
app = Flask(__name__)
​
# 첫 번째 요청 여부를 확인하기 위한 플래그를 사용
first_request_handled = False
​
@app.before_request
def initialize():
    global first_request_handled
    if not first_request_handled:
        print("이 함수는 첫 번째 요청 전에만 실행됩니다.")
        first_request_handled = True

설명:

  • before_request 데코레이터는 모든 요청 전에 실행됩니다.

  • first_request_handled 플래그를 사용하여 첫 번째 요청 시에만 로직이 실행되도록 제한합니다.

  • 첫 번째 요청이 처리되면 first_request_handledTrue로 변경하여 이후 요청에서는 실행되지 않도록 설정합니다.

이 방식으로 before_first_request와 동일한 기능을 구현할 수 있습니다.

감사합니다. 잔재미코딩 드림

HYO JIN Kim님의 프로필 이미지
HYO JIN Kim

작성한 질문수

질문하기