플라스크 앱을 여러 개의 py 파일로 분할하는 방법은 무엇입니까?
내 플라스크 어플리케이션은 현재 싱글로 구성되어 있다.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
작동시킬 수 있을까요?
일반적인 Python 패키지 구조를 사용하여 앱을 여러 모듈로 나눌 수 있습니다. Flask 문서를 참조하십시오.
하지만,
Flask는 애플리케이션 구성 요소를 만들고 애플리케이션 내 또는 애플리케이션 전체에서 공통 패턴을 지원하기 위한 Blueprint 개념을 사용합니다.
앱의 하위 구성 요소를 별도의 파일에 Blueprint로 생성할 수 있습니다.
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)
Blueprint는 템플릿 또는 정적 파일 등 특정 리소스를 번들할 수도 있습니다.자세한 내용은 플라스크 문서를 참조하십시오.
다른 파일 내의 메인에서 플라스크 앱 변수를 Import하는 간단한 트릭을 사용할 수 있습니다.
test_module을 클릭합니다.화이
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
내 쪽에서도 통한다.
이 작업은 중앙 집중식 URL 맵을 사용하여 Blueprint나 까다로운 Import 없이 수행할 수 있습니다.
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')
GitHub에서 플라스크 빈 것을 추천합니다.
Blueprint, 여러 뷰 및 확장을 쉽게 이해할 수 있습니다.
파일을 분리하기 위해 분할 Blueprint가 필요한 경우 다음과 같이 스니펫을 사용할 수 있습니다.
# app.py
from blueprint_module import blueprint
app = Flask(__name__)
app.register_blueprint(blueprint)
# blueprint_module\__init__.py
from flask import Blueprint
blueprint = Blueprint('my_blueprint', __name__)
from . import page
# blueprint_module\page.py
from . import blueprint
@blueprint.route("/url", methods=['GET'])
def hello():
return 'hello world'
앱을 청사진으로 나누는 것은 좋은 생각이다.그러나 이것이 충분하지 않고 Blueprint 자체를 여러 py 파일로 분할하고 싶다면 일반 Python 모듈 Import 시스템을 사용하여 다른 파일에서 Import되는 모든 경로를 루핑할 수도 있습니다.
이 작업을 수행하기 위한 코드를 사용하여 Gist를 만들었습니다.
https://gist.github.com/Jaza/61f879f577bc9d06029e
제가 아는 한, 이것이 현재 청사진을 분할할 수 있는 유일한 방법입니다.플라스크에서 "하위 설계도"를 작성하는 것은 불가능하지만, 이에 대한 많은 논의가 진행 중인 문제가 있습니다.
https://github.com/mitsuhiko/flask/issues/593
또한 가능한 경우(그리고 해당 문제 스레드의 일부 스니펫을 사용하여 실행 가능하더라도), 서브 Blueprint는 사용 사례에 대해 너무 제한적일 수 있습니다. 예를 들어 서브 모듈 내의 모든 루트에 동일한 URL 서브 프리픽스를 사용하지 않는 경우 등입니다.
언급URL : https://stackoverflow.com/questions/11994325/how-to-divide-flask-app-into-multiple-py-files
'programing' 카테고리의 다른 글
Gradle - 오류 [com.android] 인수에 대한 메서드 구현()을 찾을 수 없습니다.지원: appcompat-v7:26.0.0] (0) | 2022.11.01 |
---|---|
WAMP WORDPRESS가 MySQL에 연결되지만 Maria에는 연결되지 않음DB (0) | 2022.11.01 |
MARIADB - QUERY 패킷 전송 중 오류 발생(max_allowed_packet 아님) (0) | 2022.11.01 |
ORM 매핑의 '소유측'이란 무엇입니까? (0) | 2022.11.01 |
SQL Chemy - 테이블 목록 가져오기 (0) | 2022.11.01 |