python flask 工厂函数?

发布于 2022-09-01 07:40:16 字数 685 浏览 18 评论 0

如题。

今天在看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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瀟灑尐姊 2022-09-08 07:40:16

大概意思就是,方便批量生产 app。你用这个 create_app 函数方法可以创建万千上万个 app。

新一帅帅 2022-09-08 07:40:16

例子中工厂函数 create_app 的真正目的其实只有一个————根据应用的不同使用场景来使用不同的配置,核心是为了实现:

app.config.from_object(config[config_name])

因此,要把应用的实例创建的过程交给工厂函数,通过工厂函数选择你所要使用的配置,来创建适用于不同环境下的应用

别把无礼当个性 2022-09-08 07:40:16

补充wslshanlin的回答。
如果将
create_app
中的代码挪到全局命名空间(也就是manager.py)中,会出现多个app的config发生冲突等莫名其妙的问题。

这么做的目的在于:

  1. 测试。你可以使用多个应用程序的实例,为每个实例分配分配不同的配置, 从而测试每一种不同的情况。

  2. 多个实例。想象以下情景:您需要同时运行同一个应用的不同版本,您当然可以在你的Web服务器中配置多个实例并分配不同的配置,但是如果你使用工厂函数, 你就可以在一个随手即得的进程中运行这一个应用的不同实例了!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文