2017-04-25 1 views
0

는이 코드 (작업)이 있습니다이상한 플라스크 청사진 동작

bp = Blueprint(...) 

@bp.before_request 
def before_request(): 
    if self.auth_callback is not None: 
     return self.auth_callback() 

self.app.register_blueprint(
    bp, 
    url_prefix=self.config.get("FILE_UPLOAD_PREFIX") 
) 

을 그리고 이것은 작동하지 않습니다 :

bp = Blueprint(...) 

self.app.register_blueprint(
    bp, 
    url_prefix=self.config.get("FILE_UPLOAD_PREFIX") 
) 

@bp.before_request 
def before_request(): 
    if self.auth_callback is not None: 
     return self.auth_callback() 

누군가 나를 설명 할 수 뭐죠 PLZ 여기 일이? 왜 주문이 중요합니까?

답변

2

왜냐하면 Flask 앱은 주어진 청사진 개체를 직접 사용하지 않지만 BlueprintSetupState 클래스의 도움을 받아 등록시 앱에 상태를 저장하기 때문입니다. Blueprint 객체를 등록한 후에 수정하면 이전에 저장된 상태에 영향을 미치지 않습니다. 응용 프로그램과 청사진을 등록

임시 홀더 개체 :

는 동급 문서는 다음 상태 자세한 내용은 Flask sources에서 BlueprintSetupState 클래스를 참조하십시오. 이 클래스의 인스턴스는 : meth : ~flask.Blueprint.make_setup_state 메서드에 의해 만들어지며 나중에 모든 레지스터 콜백 함수에 이 전달됩니다.

편집 : 콜백이 BlueprintSetupState 예를 저장하지만, 응용 프로그램 인스턴스에되지 않기 때문에 내 이전의 대답은, 약간의 오해의 소지가 있었다. 예를 들어, 각 요청 전에 실행하기위한 함수를 before_request과 함께 사용하면 주어진 함수가으로 앱 인스턴스 before_request_funcs 목록에 추가됩니다. 따라서 등록 후 콜백을 변경하는 효과가 없습니다. Blueprint 클래스의 registerbefore_request 메서드를 참조하십시오.

+0

즉, 콜백을 사용하고 등록하는 것을 제외하고는 청사진에 래퍼를 추가 할 수 없다는 뜻입니까? 아니면 다른 방법이 있습니까? 좋은 캐치 btw,이 정보에 대한 감사, – Speedy

+1

당신은 오신 것을 환영합니다. 내 대답에 약간의 정보가 부족하다는 것을 알게되었으므로 마지막에 문제를 해결하기 위해 메모를 추가했습니다. 포장지는 무슨 뜻입니까? 데코레이터를 말하는 겁니까? –

+0

그래, 나는 데코레이터를 의미한다. 그러나 당신의 편집은이 질문에 이미 대답했습니다. 대단히 감사합니다. – Speedy

관련 문제