如题。
今天在看flask web,说到了工厂函数,不是很理解,请大神来指教一下,上源码。
app/init.py:程序包的构造文件
from flask import Flask, render_template
from flask.ext.bootstrap import Bootstrap
from flask.ext.mail import Mail
from flask.ext.moment import Moment
from flask.ext.sqlalchemy import SQLAlchemy
from config import config
bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app)
return app
일반적인 의미는 앱의 대량생산에 편리하다는 뜻입니다. 이
create_app
함수 메서드를 사용하면 수천 개의 앱을 만들 수 있습니다.예제에서 팩토리 기능
으아아아create_app
의 실제 목적은 실제로 단 하나입니다. 즉, 애플리케이션의 다양한 사용 시나리오에 따라 다양한 구성을 사용하는 것이 핵심입니다.따라서 애플리케이션 인스턴스 생성 과정을 팩토리 기능에 넘겨주고, 팩토리 기능을 이용해 원하는 구성을 선택해 다양한 환경에 적합한 애플리케이션을 생성해야 합니다
wslshanlin의 답변을 보충합니다.
create_app
의 코드를 전역 네임스페이스(즉, Manager.py)로 옮기면 여러 앱의 구성이 충돌하는 등 설명할 수 없는 문제가 발생합니다.
목적은 다음과 같습니다.
테스트. 애플리케이션의 여러 인스턴스를 사용하여 각 인스턴스에 서로 다른 구성을 할당하고 서로 다른 시나리오를 테스트할 수 있습니다.
여러 인스턴스. 다음 시나리오를 상상해 보세요. 동일한 애플리케이션의 여러 버전을 동시에 실행해야 합니다. 물론 웹 서버에서 여러 인스턴스를 구성하고 서로 다른 구성을 할당할 수 있지만 팩토리 기능을 사용하는 경우 이 애플리케이션의 다른 인스턴스를 사용할 수 있습니다. 진행 중입니다!