Python-web框架 Config 通用配置和init_app 静态方法的作用

18 篇文章 0 订阅

《flask Web开发》第七章中,有config的代码

创建一个文件Config.py保存配置:

#coding:utf-8
import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS =False
    #上传图片、Excel、Xmind路径设置
    UPLOAD_IMG_FOLDER = os.path.join(basedir, 'app/static/upload/img/')
    UPLOAD_EXCEL_FOLDER = os.path.join(basedir, 'app/static/upload/excel/')
    UPLOAD_XMIND_FOLDER = os.path.join(basedir, 'app/static/upload/xmind/')

    #...各种其他通用配置变量在此省略

    @staticmethod
    def init_app(app):
        pass

class DevelopmentConfig(Config):
    #该环境下特有配置,省略

class TestingConfig(Config):
    #该环境下特有配置,省略

class ProductionConfig(Config):
    #该环境下特有配置,省略

config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

创建基类Config来保存通用配置 其他的各环境使用不同的配置 再用一个字典提供选择,但是不懂静态方法init_app的具体作用是什么?一个空函数可以做什么?

在__init__.py中使用它:

#coding:utf-8
from flask import Flask,  render_template
from config import config
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_login import LoginManager
from flask_pagedown import PageDown
from flask_moment import Moment
import datetime
from flask_wtf.csrf import CsrfProtect



""" 各组件初始化 """
csrf = CsrfProtect()
bootstrap = Bootstrap()
db = SQLAlchemy()
mail = Mail()
login_manager = LoginManager()
# session安全保护级别设置
login_manager.session_protection = 'basic'
# 默认登录入口
login_manager.login_view = 'auth.login'
pagedown = PageDown()
moment = Moment()


""" 根据配置选项创建Flask APP """
def create_app(config_name):
    app = Flask(__name__)
    # 使用chartkick配合falsk画报表
    app.jinja_env.add_extension("chartkick.ext.charts")
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    csrf.init_app(app)
    bootstrap.init_app(app)
    db.init_app(app)
    mail.init_app(app)
    login_manager.init_app(app)
    pagedown.init_app(app)
    moment.init_app(app)

    """ 按照功能模块来组织蓝图 """
    from .index import index as index_blueprint
    app.register_blueprint(index_blueprint, url_prefix='/')

    return app

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值