python - 플라스크 청사진 AttributeError:'모듈'객체에 'name'속성 오류가 없습니다.



flask (1)

포함 된 Blueprint 객체가 아닌 모듈 을 등록하려고합니다.

대신 Blueprint 인스턴스를 찾으려면 모듈을 인트로 스펙 션해야합니다.

if mod_name not in sys.modules:
    loaded_mod = __import__(EXTENSIONS_DIR+"."+mod_name+"."+mod_name, fromlist=[mod_name])
    for obj in vars(loaded_mod).values():
        if isinstance(obj, Blueprint):
            app.register_blueprint(obj)

내 API는 개발자가 기능을 확장 할 수 있도록 제작되었습니다. 필자의 계획은 청사진에 들러서 동적으로로드되는 "확장"디렉토리를 제공하여이를 수행하는 것입니다. 이것은 가져 오기 위해 활용하고있는 코드입니다 (이 tutorial 에서 수정 됨).

from flask import Flask

import pkgutil
import sys

app = Flask(__name__)

EXTENSIONS_DIR = "extensions"
modules = pkgutil.iter_modules(path=[EXTENSIONS_DIR])
for loader, mod_name, ispkg in modules: 
    if mod_name not in sys.modules:
        # It imports fine
        loaded_mod = __import__(EXTENSIONS_DIR+"."+mod_name+"."+mod_name, fromlist=[mod_name])
        # It does not register
        app.register_blueprint(loaded_mod)

이것은 내 프로젝트의 디렉토리 레이아웃입니다. extensions 디렉토리는 개발자가 확장 된 기능을 사용하는 곳입니다.

/root
    /extensions
        /extension1
            __init__.py
            extension1.py
        /extension2
            __init__.py
            extension2.py
    simple_example.py

문제는이 오류가 발생하고 그것이 무엇을 말하고 있는지 확신 할 수 없다는 것입니다.

>python simple_example.py
Traceback (most recent call last):
  File "simple_example.py", line 14, in <module>
    app.register_blueprint(loaded_mod)
  File "C:\Python27\lib\site-packages\flask\app.py", line 62, in wrapper_func
    return f(self, *args, **kwargs)
  File "C:\Python27\lib\site-packages\flask\app.py", line 880, in register_blueprint
    if blueprint.name in self.blueprints:
AttributeError: 'module' object has no attribute 'name'

간단한 확장 프로그램은 다음과 같습니다.

from flask import Blueprint

extension1 = Blueprint('extension1', __name__)

@extension1.route("/my_route")
def treasure_list():
    return "list of objects"

app.register_blueprint 호출이 성공할 수 있도록 AttributeError 를 해결하려면 어떻게해야합니까?





flask