2012-06-21 4 views
5

플라스크를 시작하기 만하면 걸렸습니다. 저는 프레임 워크에 익숙해지기 위해 작은 블로그를 작성하려고합니다. 그래서 나는 "인증"과 "게시물"이라는 두 개의 패키지를 만들었습니다. Flask docs의 Large Applications 섹션을 읽었습니다.플라스크 : 하나의 앱에서 여러 패키지 사용

내 디렉토리는 다음과 같습니다.

from flask import Flask 
from auth import auth_app 
from posts import posts_app 

auth_app.run() 
posts_app.run() 

/posts/__init__.py이 같은 /auth/__init__.py보기 :

from flask import Flask 

auth_app = Flask(__name__) 

import auth.views 

을하고는 다음과 같이 views.py의 :

from auth import auth_app 

@auth_app.route('/auth/') 
def index(): 
    return "hello auth!" 

>/root 
>>run.py 

>>/posts 

>>>____init____.py 
>>>views.py 
>>>/templates 
>>>/static 

>>/auth 
>>>____init____.py 
>>>views.py 
>>>/templates 
>>>/static 

run.py은 다음과 같습니다

하지만 서버를 실행할 때마다 localhost/auth/만 사용할 수 있으며 그 밖의 모든 것은 404를 제공합니다. som은 게시물 앱이 실행되고 있지 않다고 가정합니다.

아무도 도와 줄 수 있습니까?

답변

5

auth_app.run() 메소드는 프로그램 실행을 계속 차단합니다. 이것이 posts_apps 앱이 실행되지 않는 이유입니다. 페이지를 제공하는 전체 프로세스는 Flask의 run() 메소드 내에서 발생합니다. 따라서 동일한 프로세스에서 두 개의 Flask 앱을 ​​실행할 수 없다고 결론 내릴 수 있습니다.

응용 프로그램을 이렇게 두 개로 분할하려면 blueprints을 사용하는 것이 좋습니다. 두 개의 앱 (인증 및 게시물)을 만드는 대신 두 개의 청사진을 만듭니다. 당신이 당신이 werkzeug.wsgi.DispatcherMiddleware에 보일 것입니다 각 패키지에 대해 별도의 응용 프로그램을 사용하려면 청사진을 사용하여 마크의 접근 방식은, 당신의 프로젝트를 맞는 등 비록 보이지만 그런 다음 ...과 같이

from flask import Flask 
from auth import auth_blueprint 
from posts import post_blueprint 

app = Flask(__name__) 
app.register_blueprint(auth_blueprint) 
app.register_blueprint(post_blueprint) 
app.run() 
+0

청사진은 좋은 아이디어입니다! –

+0

'auth'와'post' 청사진이'run.py'와 함께 루트 레벨에서 정의 된'models.py' 모듈을 사용해야한다면 어떨까요?그런 다음 주 응용 프로그램과 "완전히 독립적"이 아니 어서 동일한 'models.py'가없는 다른 응용 프로그램에서 재사용 할 수 없더라도 청사진으로 선언하는 것이 합리적일까요? 고맙습니다! – aralar

+1

@ miguel5 "독립적"이라고 정의하는 것은 귀하에게 달려 있습니다. Flask 청사진은 Flask가 염두에두고있는 것들을 분리하는 방법을 제공합니다 : 정적 및 템플릿 파일의 위치, URL 및보기로 매핑하는 방법 등이 있습니다.이 옵션을 사용하여이 디렉토리 만 다른 경우 ,하지만 여전히 하나의'model.py'에 의지한다면, 괜찮습니다. 모델을 다양한 데이터 구조로 분리하려는 경우에도이를 수행 할 수 있습니다. 플라스크 자체는'models.py' 파일을 어떻게 저장하는지에 상관하지 않습니다. –

4

을 하나의 응용 프로그램을 만듭니다.

첫 번째 질문을 실행 한 후에 단일 프로세스가 두 번째 앱을 실행할 수 없지만 DispatcherMiddleware에는 문제가 없습니다. 이 도구를 사용하여 URL 접두사를 기반으로하는 메인 애플리케이션과 다른 애플리케이션을 정의 할 수 있습니다.

doc의 예제는 사용자가 요청한 URL에 따라 실행되는 두 개의 응용 프로그램 (frontend와 backend)을 구분합니다.

자세한 내용은 Matt Wright의 "How I Structure My Flask Applications"을 읽고 그의 샘플 프로젝트 Overholt을 참조하십시오. 그는 메인 웹 사이트 (프런트 엔드)와 API 용으로 두 가지 응용 프로그램을 사용하기로 결정하고 URL 접두사를 기반으로 두 응용 프로그램을 구분합니다. 자신의 코드 *에서 각 등 전망, 구성의 정의 된 집합이 같은 파이썬 인터프리터 과정에서이를 실행할 수있는 것을 특징으로

 from werkzeug.serving import run_simple 
    from werkzeug.wsgi import DispatcherMiddleware 
    from overholt import api, frontend 


    application = DispatcherMiddleware(frontend.create_app(), { 
     '/api': api.create_app() 
    }) 


    if __name__ == "__main__": 
     run_simple('0.0.0.0', 5000, application, use_reloader=True, use_debugger=True) 

이 방법은, 그는 두 개의 응용 프로그램을 만듭니다.

* run_simple()은 개발을위한 용도로만 사용됩니다.

관련 문제