def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(config_class) # 通知Flask读取并使用配置文件 db.init_app(app) # db对象来表示数据库 migrate.init_app(app, db) # 数据库迁移引擎migrate login.init_app(app) # 登录管理初始化 mail.init_app(app) # 创建邮件实例,该邮件实例用于发送更改密码验证信息 bootstrap.init_app(app) # CSS框架Bootstrap初始化 moment.init_app(app) # 日期和时间转换成插件格式化 babel.init_app(app) # Flask-Babel正是用于简化翻译工作的 # 如果Elasticsearch服务的URL在环境变量中未定义,则赋值None给app.elasticsearch app.elasticsearch = Elasticsearch([ app.config['ELASTICSEARCH_URL'] ]) if app.config['ELASTICSEARCH_URL'] else None from app.errors import bp as errors_bp app.register_blueprint(errors_bp) # 向应用注册错误blueprint from app.auth import bp as auth_bp app.register_blueprint( auth_bp, url_prefix='/auth' ) # url_prefix。 这完全是可选的,Flask提供了给blueprint的路由添加URL前缀的选项 from app.main import bp as main_bp app.register_blueprint(main_bp) from app.api import bp as api_bp # 向应用注册API blueprint app.register_blueprint(api_bp, url_prefix='/api') if app.config[ 'SEND_MAIL'] and not app.debug and not app.testing: # 在Debug和单元测试期间跳过所有这些日志记录 if app.config['MAIL_SERVER']: auth = None if app.config['MAIL_USERNAME'] or app.config['MAIL_PASSWORD']: auth = (app.config['MAIL_USERNAME'], app.config['MAIL_PASSWORD']) secure = None if app.config['MAIL_USE_TLS']: secure = () mailhost = (app.config['MAIL_SERVER'], app.config['MAIL_PORT']) fromaddr = app.config['MAIL_USERNAME'] toaddrs = app.config['ADMINS'] subject = "Microblog Failure" credentials = auth mail_handler = SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=credentials, secure=secure, timeout=10) # 设置要发送邮件日志的格式 mail_handler.setFormatter( logging.Formatter( '[%(asctime)s] %(levelname)s in %(module)s: %(message)s')) mail_handler.setLevel(logging.ERROR) # 设置级别 mail_handler.set_name("failure email") # 设置该条日志配置的名称 app.logger.addHandler(mail_handler) # 记录日志 if not os.path.exists('logs'): os.mkdir('logs') # 设置每个日志文件10M,总共备份10个日志文件 file_handler = RotatingFileHandler('logs/microblog.log', maxBytes=1024 * 1024 * 10, backupCount=10) file_handler.setFormatter( logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' )) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) app.logger.info('Microblog startup') return app
toaddrs = app.config['ADMINS'] subject = "Fruit Supermarket Failure" credentials = auth mail_handler = SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=credentials, secure=secure, timeout=10) # 设置要发送邮件日志的格式 mail_handler.setFormatter( logging.Formatter( '[%(asctime)s] %(levelname)s in %(module)s: %(message)s')) mail_handler.setLevel(logging.ERROR) # 设置级别 mail_handler.set_name("failure email") # 设置该条日志配置的名称 app.logger.addHandler(mail_handler) # 记录日志 if not os.path.exists('logs'): os.mkdir('logs') # 设置每个日志文件10M,总共备份10个日志文件 file_handler = RotatingFileHandler('logs/smartscales.log', maxBytes=1024 * 1024 * 10, backupCount=10) file_handler.setFormatter( logging.Formatter( '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]' )) file_handler.setLevel(logging.INFO) app.logger.addHandler(file_handler)