2012-07-13 3 views
21

플라스크 (Flask)를 사용하여 단순하지만 단순한 애플리케이션을 만들려고 노력 중이며 문서에서 잘 설명되지 않은 상황이 계속되고 있습니다.플라스크 애플리케이션의 구조

내 응용 프로그램을 다른 모듈로 분할하고 싶지만 기본 모듈이 아닌 다른 곳에서 app 개체 (또는 db : flask-sqlalchemy)에 액세스하는 것이 어려워 보입니다. 모든 것이 접근 할 수있는 세계로 취급하는 자신의 방식을 실제로 작성해야하는 것처럼 보입니다. 의심스러운 코드와 약간의 시간이 필요합니다.

appdb은 모두 주 응용 프로그램이 인스턴스화되는 수준에서 만들어지며 모든 예제에서는 최상위 수준에서 사용할 수 있다고 가정합니다. 그러나 다른 URL 핸들러를 다른 모듈로 분리하면 @app.route 데코레이터를 사용할 수 없습니다. 나는 그 주위에 app.add_url_rule('/...', some.module...)로 해결할 수 있지만, 다시, 그 기능으로 전달되지 않습니다.

db과 같은 일이 발생합니다. g에 붙여야하는지 또는 app을 통해 액세스 할 수 있는지 여부는 잘 모르겠습니다. 그렇게하면 모델을 별도의 모듈로 옮기는 데 도움이되지 않습니다 - 가져올 때 db에 액세스하려면 어떻게해야합니까? 모든 예제는 다시 로컬 변수로 사용할 수 있다고 가정합니다.

나는 명백한 것을 놓치고 있습니까? 아니면 잘못된 작업을 위해 플라스크를 사용하려고합니까?

+0

장식자는 단지 함수 래퍼입니다. 모든 서버 로직을 캡슐화하고 클래스의 모든'db' 및'app' 변수를 저장하는 클래스를 만들 수 있습니다. – Blender

+0

@Blender 물론 이것을 해결할 수있는 방법은 여러 가지가 있습니다. 제가 진정으로 원하는 것은 그것을 다루는 표준적인 방법이 있고 그것이 문서에서 완전히 누락 된 것처럼 보이면 길을 따라 더 많은 놀람이 있는지입니다. 나는 어딘가에서 제시된 플라스크 자체로부터 좀 더 명백한 해결책을 기대하고 있었다. – viraptor

+0

청사진 – user956424

답변

19

귀하의 질문에 대한 답변은 청사진입니다. 실제로 문서를 살펴보면 청사진을 통해 모듈에서 응용 프로그램을 분할 할 수 있다는 것을 알 수 있습니다.

샘플 코드 : app.py

from yourmodule import mod 

    app.register_blueprint(mod) 

에서

from flask import Blueprint 

    mod = Blueprint(blueprint_name, __name__, template_folder="folder_name" 
        static_folder="folder_name") 

    @mod.route('/mymodule') 
    def view(): 
     # your code 

이 모듈에 응용 프로그램을 분할 할 수있는 권리 방법입니다. 자세한 내용은 청사진 문서를 확인하십시오.

다른 모듈에서 앱에 액세스해야하는 경우 앱의 current_app 프록시를 사용해야합니다.

from flask import current_app 

체크 아웃 플라스크의 창조자에 의해 대형 프로젝트에 대한 모듈로 플라스크 응용 프로그램을 분할하는 방법을 안내합니다이 document.

+0

문서에 대한 링크가 아주 좋습니다! ;) –

+1

@IgnasB. 감사!나에게 기본 대형 플라스크 앱 구조로 github에서이 레포를 확인해보십시오. https://github.com/codecool/flask-app-structure – codecool

+0

살펴 보겠습니다. ;) –

2

는 당신은 본 적이 새로운 blueprintsfeature (나는 아직 그것을 사용하지만,이 귀하의 경우 도움이 될 것 같은 소리하지 않은 경우).