플라스크 앱을 여러 개의 py 파일로 나누는 방법은 무엇입니까?


146

내 플라스크 응용 프로그램은 현재 test.py여러 경로와 main()경로가 정의 된 단일 파일 로 구성되어 있습니다 . test2.py처리되지 않은 경로를 포함 하는 파일을 만들 수있는 방법 이 test.py있습니까?

@app.route('/somepath')
def somehandler():
    # Handler code here

경로가 너무 많아서 test.py실행할 수 있도록 만들고 싶습니다 . 동일한 경로의 파일 인 것처럼 python test.py경로를 선택 test.py합니다. 이 작업을 수행 하기 위해 변경 test.py하거나 포함 해야 할 사항은 무엇입니까 test2.py?

답변:


152

일반적인 Python 패키지 구조를 사용하여 앱을 여러 모듈로 나눌 수 있습니다 . Flask 문서를 참조하십시오.

하나,

Flask는 응용 프로그램 구성 요소를 만들고 응용 프로그램 내에서 또는 응용 프로그램간에 공통 패턴을 지원하기 위해 청사진 개념을 사용합니다.

앱의 하위 구성 요소를 별도의 파일에 블루 프린트로 만들 수 있습니다.

simple_page = Blueprint('simple_page', __name__, template_folder='templates')
@simple_page.route('/<page>')
def show(page):
    # stuff

그런 다음 주요 부분에서 사용하십시오.

from yourapplication.simple_page import simple_page

app = Flask(__name__)
app.register_blueprint(simple_page)

블루 프린트는 템플릿이나 정적 파일과 같은 특정 리소스를 묶을 수도 있습니다. 자세한 내용은 플라스크 문서 를 참조 하십시오.


1
어떻게 우리는 다른 파일의 청사진 노선 수 init이 그 청사진을?
divyenduz '12

JWT를 사용하여 안전한 엔드 포인트를 만들고 싶다면 모든 route.py 파일에서 어떻게해야합니까
Ashok Sri

18

다른 파일 내부의 main에서 플라스크 앱 변수를 가져 오는 간단한 트릭을 사용할 수 있습니다.

test-routes.py

from __main__ import app

@app.route('/test', methods=['GET'])
def test():
    return 'it works!'

플라스크 앱을 선언 한 기본 파일에서 다음과 같이 테스트 경로를 가져옵니다.

app.py

from flask import Flask, request, abort

app = Flask(__name__)

# import declared routes
import test-routes

그것은 내 편에서 작동합니다.


2
이것은 단지 예일뿐입니다. __main__입력 파일을 참조하십시오.
nimeresam

3
훌륭하고 감사합니다. 위의 블루 프린트 또는 패키지 접근 방식은 작은 앱에는 과잉입니다.
VH-NZZ

이 방법을 설명하는 문서에 대한 링크는 다음과 같습니다. https://flask.palletsprojects.com/en/1.1.x/patterns/packages/
Christopher

@nimeresam 그것은 나를 위해 일했지만 파일 import test-routes의 맨 위에있을 수 없다는 것을 배워야했습니다 app.py. gunicorn이 추락했지만 가져 오기를 파일의 맨 아래로 이동 한 후 작동했습니다. "모듈을 가져 와서 파일 맨 아래에서 수행하고 있음"
Niklas R.


5

앱을 청사진으로 나누는 것이 좋습니다. 그러나 이것으로 충분하지 않고 블루 프린트 자체를 여러 개의 py 파일로 나누려면 일반 파이썬 모듈 가져 오기 시스템을 사용하고 다른 파일에서 가져온 모든 경로를 반복하는 것도 가능합니다 .

이 작업을 수행하는 코드로 요점을 만들었습니다.

https://gist.github.com/Jaza/61f879f577bc9d06029e

내가 아는 한, 이것은 현재 블루 프린트를 분할 할 수있는 유일한 방법입니다. Flask에서 "하위 블루 프린트"를 생성 할 수는 없지만 이에 대한 많은 논의가 있지만 문제가 있습니다.

https://github.com/mitsuhiko/flask/issues/593

또한 가능하더라도 (이 문제 스레드의 일부 스 니펫을 사용하여 가능할 수도 있음) 하위 블루 프린트는 어쨌든 유스 케이스에 너무 제한적일 수 있습니다 (예 : 하위 모듈은 동일한 URL 하위 접두사를 갖습니다.


4

이 작업은 중앙 집중식 URL 맵을 사용하여 청사진과 까다로운 가져 오기없이 수행 할 수 있습니다.

app.py

import views
from flask import Flask

app = Flask(__name__)

app.add_url_rule('/', view_func=views.index)
app.add_url_rule('/other', view_func=views.other)

if __name__ == '__main__':
    app.run(debug=True, use_reloader=True)

views.py

from flask import render_template

def index():
    return render_template('index.html')

def other():
    return render_template('other.html')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.