zoukankan      html  css  js  c++  java
  • Flask app.config 的配置

    原理如下:

     
    image.png

    1、通过调用自定义config.py文件中config字典,可以得到一个类,
    这个类里面定义的都是类变量,这些变量就是自定义的一些配置项。
    如下config.py : :

    import os
    
    
    BASEDIR = os.path.abspath(os.path.dirname(__file__))
    
    
    class Config:
        """base config"""
        SECRET_KEY = os.environ.get('SECRET_KEY') or 'secret key'
        SQLALCHEMY_COMMIT_ON_TEARDOWN = True
        SQLALCHEMY_TRACK_MODIFICATIONS = True
        FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
        
        FLASKY_MAIL_SENDED = 'jianghan@julanling.com'     # 发件人地址
        FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'     # 邮件主题前缀
    
    
    class ProductionConfig(Config):
        """运行环境配置"""
        SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 
            'sqlite:///' + os.path.join(BASEDIR, 'data.sqlite')
    ......
    
    config = {
        'development': DevelopmentConfig,
        'testing': ProductionConfig,
        'production': ProductionConfig,
        'default': DevelopmentConfig
    }
    

    2、利用Flask类,实例app,并把自定义配置传进去。
    如下app.py:

    # __name__是本文件名字,
    # Flask类里面,会根据此名字,找到app.py所在目录,即默认为根目录。
    app = Flask(__name__)
    app.config.from_object(config['testing'])
    

    3、配置原理:

    自定义配置类给到app.config。
    app.config 来自于 self.make_config()
    self.make_config() 返回的值是 config_class()
    config_class 就是Config类。
    config_class(),是config加个括号,其实就是Config()

    通过上面一系列的串联,可以看出:
    app.config,就是Config()

    之所以要在中间加一些方法,如mke_config(),是为了给Config()添加一些默认值。
    例如:根目录root_path、默认配置self.default_config等。
    如下:

        def make_config(self, instance_relative=False):
            root_path = self.root_path
            if instance_relative:
                root_path = self.instance_path
            return self.config_class(root_path, self.default_config)
    

    其实,在你在写到app.config时,就已经创建了一个带默认配置项的Config()实例。
    Config类有很多方法可以修改默认配置和添加新配置。如from_object()

    当写到 app.config.from_object(config),其实就是对默认配置的修改和添加。

    参考:很多,在网上了其他人的一些解释,然后自己再看看源码,就大概明白了。



    logging模块

    flask配置日志

    代码

    from logging.handlers import RotatingFileHandler
    from flask import Flask, request
    import logging
    app = Flask(__name__)
    app.config['PROPAGATE_EXCEPTIONS'] = False  # 设置是否传递异常 , 如果为True, 则flask运行中的错误会显示到网页中, 如果为False, 则会输出到文件中
    
    
    class RequestFormatter(logging.Formatter):  # 自定义格式化类
        def format(self, record):
            """每次生成日志时都会调用, 该方法主要用于设置自定义的日志信息
            :param record 日志信息"""
            record.url = request.url  # 获取请求的url
            record.remote_addr = request.remote_addr  # 获取客户端的ip
    
            return super().format(record)  # 执行父类的默认操作
    
    
    # flask中提供了两个日志  1> werkzeug 记录web应用运行中出现的错误  2> flask.app  给开发者预留的日志
    # flask中的运行错误也会记录到flask.app的日志中
    def create_logger():
        """配置flask日志"""
        # 创建flask.app日志器
        flask_logger = logging.getLogger('flask.app')
        # 设置全局级别
        flask_logger.setLevel('DEBUG')
    
        # 创建控制台处理器
        console_handler = logging.StreamHandler()
    
        # 给处理器设置输出格式
        console_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
        console_handler.setFormatter(console_formatter)
    
        # 日志器添加处理器
        flask_logger.addHandler(console_handler)
    
        # 创建文件处理器
        file_handler = RotatingFileHandler(filename='flask.log', maxBytes=100 * 1024 * 1024, backupCount=10)  # 转存文件处理器  当达到限定的文件大小时, 可以将日志转存到其他文件中
    
        # 给处理器设置输出格式
        file_formatter = RequestFormatter(fmt='[%(asctime)s] %(remote_addr)s requested %(url)s %(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
        file_handler.setFormatter(file_formatter)
        # 单独设置文件处理器的日志级别
        file_handler.setLevel('WARN')
    
        # 日志器添加处理器
        flask_logger.addHandler(file_handler)
    
    
    @app.route('/')
    def index():
        # num = 1 / 0
        app.logger.error('this is a error')
        return "index"
    
    
    if __name__ == '__main__':
        create_logger()
        app.run(debug=True)

    自定义日志信息

    项目中配置日志

    • 在 家目录中手动创建log文件夹
    # 查看最新的⽇日志
    tail flask.log # 默认查看最新的10⾏行行⽇日志
    tail -n 100 flask.log # 默认查看最新的100⾏行行⽇日志
    tail -f flask.log # 动态监听⽇日志



  • 相关阅读:
    查找算法
    顺序表和链表
    队列
    Redis系列教材 (二)- 运行
    Redis系列教材 (一)- windows教程
    Maven系列教材 (十三)- Eclipse 中创建父子-聚合项目
    Maven系列教材 (十一)- 使用Eclipse导入一个Maven风格的SSM项目
    Maven系列教材 (十)- 使用Eclipse创建一个Maven风格的SSM项目
    Maven系列教材 (九)- 在Eclipse中创建maven风格的java web项目
    Maven系列教材 (八)- 用命令行创建Maven风格的java web项目
  • 原文地址:https://www.cnblogs.com/ExMan/p/10161829.html
Copyright © 2011-2022 走看看