플라스크 앱을 여러 파일로 분할하는 방법을 이해하는 데 문제가 있습니다.
웹 서비스를 만들고 있는데 API를 다른 파일 (AccountAPI.py, UploadAPI.py, …)로 나누고 싶습니다. 그래서 거대한 파이썬 파일이 하나도 없습니다.
블루 프린트로이 작업을 수행 할 수 있다는 것을 읽었지만 경로가 나에게 적합한 경로인지 완전히 확신 할 수 없습니다.
궁극적으로 하나의 Main python 파일을 실행하고 다른 파일을 포함하여 실행될 때 하나의 큰 파일로 간주되도록합니다.
예를 들어 Main.py 및 AccountAPI.py가있는 경우 다음을 수행 할 수 있습니다.
Main.py :
from flask import Flask
import AccountAPI
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
AccountAPI.py :
@app.route("/account")
def accountList():
return "list of accounts"
이 예제에서는 분명히 작동하지 않을 것이라는 것을 알고 있지만 이와 같은 작업을 수행 할 수 있습니까?
감사
답변
예, 블루 프린트가 올바른 방법입니다. 다음과 같이하려는 작업을 수행 할 수 있습니다.
Main.py
from flask import Flask
from AccountAPI import account_api
app = Flask(__name__)
app.register_blueprint(account_api)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
AccountAPI.py
from flask import Blueprint
account_api = Blueprint('account_api', __name__)
@account_api.route("/account")
def accountList():
return "list of accounts"
이것이 옵션 인 경우 명확하게 구분하기 위해 서로 다른 API / Blueprint에 대해 서로 다른 URL 접두사를 사용하는 것을 고려할 수 있습니다. 위의 register_blueprint
호출 을 약간 수정하면됩니다 .
app.register_blueprint(account_api, url_prefix='/accounts')
추가 문서 는 공식 문서 를 참조 할 수도 있습니다 .
답변
를 사용 Blueprint
하여 routes
디렉토리에 경로를 추가 할 수 있습니다 .
구조
app.py
routes
__init__.py
index.py
users.py
__init__.py
from flask import Blueprint
routes = Blueprint('routes', __name__)
from .index import *
from .users import *
index.py
from flask import render_template
from . import routes
@routes.route('/')
def index():
return render_template('index.html')
users.py
from flask import render_template
from . import routes
@routes.route('/users')
def users():
return render_template('users.html')
app.py
from routes import *
app.register_blueprint(routes)
당신이 새로운 경로 파일을 추가 말하고 싶은 경우에 accounts.py
, 당신은 단지 파일을 생성 할 필요가 accounts.py
에서 routes
처럼 디렉토리를 index.py
하고 users.py
, 그 다음에 가져올 routes.__init__.py
파일
from .accounts import *
답변
Blueprint를 사용하고 있고 사용중인 템플릿 내에서 Blueprint의 URL로 라우팅 / 리디렉션하려면 올바른 url_for 문을 사용해야합니다.
귀하의 경우 청사진의 URL 계정을 열려면 템플릿에 다음 과 같이 명시해야합니다 .
href="{{ url_for('account_api.account') }}"
메인 앱의 경우 다음과 같습니다.
redirect(url_for('account_api.account'))
그렇지 않으면 werkzeug 라이브러리에서 오류가 발생합니다.