• 【flask】flask项目配置 app.config


    【理论】

     在很多情况下,你需要设置程序的某些行为,这时你就需要使用配置变量。在Flask中,配置变量就是一些大写形式的Python变量,

    你也可以称之为配置参数或配置键。使用统一的配置变量可以避免在程序中以硬编码的形式设置程序。

      在一个项目中,你会用到许多配置,Flask提供的配置,扩展(比如flask-sqlalchemy,flask-mail)提供的配置,还有程序特定的配置。

    和平时使用的变量不同,这些配置变量都通过Flask对象的app.config属性作为统一的接口来设置和获取,它指向的Config类实际上是字典的的子类,

    所以你可以像操作其它字典一样操作它。 

      当我们创建1个Flask对象(也就是app),就可以通过app.config来查看这个app的所有配置变量

    from flask import Flask
    app=Flask(__name__)
    
    print(type(app.config))
    <class 'flask.config.Config'>#app.config的类型
    
    print(app.config)#app.config 以键值对的形式 保存app的配置信息
    <Config {'ENV': 'production', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093}>

      常用配置及含义:

    ENV:测试环境
    production:生产环境,development:开发环境
    DEBUG:是否开启debug模式
    SECRET_KEY:密钥字符串
    JSON_AS_ASCII:是否以ascii编码展示响应报文
    JSONIFY_MIMETYPE:响应报文类型

      值得注意的是:

      如果响应报文含中文,JSON_AS_ASCII的值为False,JSONIFY_MIMETYPE值为"application/json;charset=utf-8",

      否则响应报文中的中文会显示乱码

    JSON_AS_ASCII =False
    JSONIFY_MIMETYPE = "application/json;charset=utf-8"

    【实践】

       Flask提供了很多种方式来加载配置。比如,你可以像在字典中添加一个键值对一样来设置一个配置:

    app.config['ADMIN_NAME']='Peter'

      注意:配置的名称必须是全大写形式,小写的变量将不会被读取

       除此之外,还可以通过把配置变量存储在单独的Python脚本、JSON格式的文件或是Python类中,config对象提供了相应的方法来导入配置

       和操作字典一样,读取一个配置就是从config字典里通过将配置的名称作为键读取对应的值:

    value=app.config['ADMIN_NAME']

      注意:某些扩展需要读取配置值来完成初始化操作,比如Flask-Mail,因此我们应该尽量将加载配置的操作提前,最好在程序实例app创建后就加载配置。

        下面将逐一演示各种配置方式,及其效果

       目录结构:

     

      通过 键值对 配置app.config:

    from flask import Flask
    app =Flask(__name__)
    print('配置前',app.config.get('FLASK_ENV'))
    #使用键值对配置app环境变量
    app.config['FLASK_ENV']='ABC'
    print('配置后',app.config.get('FLASK_ENV'))
    
    #------运行结果----------------
    配置前 None
    配置后 ABC

       使用update()方法可以一次加载多个值:

    from flask import Flask
    app =Flask(__name__)
    
    print('配置前',app.config.get('FLASK_ENV'))
    #使用 update()方法可以一次加载多个值
    app.config.update(
        FLASK_ENV='ABC',
        AAAA=123456
    )
    print('配置后',app.config.get('FLASK_ENV'))
    print('配置后',app.config.get('AAAA'))
    
    #------运行结果----------------
    配置前 None
    配置后 ABC
    配置后 123456

      通过 json文件 配置app.config:app.config.from_json

      settings.json文件内容如下:

    {
      "FLASK_ENV":"json"
    }

      代码示例:

    from flask import Flask
    app =Flask(__name__)
    
    import os
    basedir = os.path.abspath(os.path.dirname(__file__))
    jsondir =os.path.join(basedir,'settings.json')
    
    print('配置前',app.config.get('FLASK_ENV'))
    #使用 json文件 配置app环境变量
    app.config.from_json(jsondir)
    print('配置后',app.config.get('FLASK_ENV'))
    
    #------运行结果----------------
    
    配置前 None
    配置后 json

      通过 字典 配置app.config: app.config.from_mapping

      代码示例:

    from flask import Flask
    app =Flask(__name__)
    
    configDict={
    'FLASK_ENV':'dictConfig'
    }
    
    print('配置前',app.config.get('FLASK_ENV'))
    #使用 json文件 配置app环境变量
    app.config.from_mapping(configDict)
    print('配置后',app.config.get('FLASK_ENV'))
    
    #------运行结果----------------
    配置前 None
    配置后 dictConfig

       通过 python文件 配置app.config:

      settings.py文件中内容如下:

      py文件中的变量名将作为 app.config配置的key,变量值作为app.config[key]的value

    FLASK_ENV='pyConfig'

    代码示例:

    from flask import Flask
    app =Flask(__name__)
    
    print('配置前',app.config.get('FLASK_ENV'))
    #使用 json文件 配置app环境变量
    app.config.from_pyfile('settings.py')
    print('配置后',app.config.get('FLASK_ENV'))
    
    #------运行结果----------------
    配置前 None
    配置后 pyConfig

      通过 配置类 配置app.config:

      classConfig.py定义了配置类BaseConfig

      类中的属性作为 app.config的key,类中的属性值作为app.config[key]的value

    class BaseConfig(object):
        FLASK_ENV='objectConfig'

      代码示例:

    from flask import Flask
    app =Flask(__name__)
    
    from demoConfig.classConfig import BaseConfig
    objConfig=BaseConfig()
    
    print('配置前',app.config.get('FLASK_ENV'))
    #使用 json文件 配置app环境变量
    app.config.from_object(objConfig)
    print('配置后',app.config.get('FLASK_ENV'))
    
    #------运行结果----------------
    配置前 None
    配置后 objectConfig

     

  • 相关阅读:
    近来有客户要求用table显示一大串数据,由于滚动后就看不到表头,很不方便,所以想到这个效果。
    js如何取当前日期时间/格式为:yyyymmdd hh:mm:ss
    jdk源码分析 – Thread线程类源码分析
    Swing中的MVC
    编程生涯的一次思想总结
    怎样成为高手
    浅谈测试驱动开发(TDD)
    Java RMI之HelloWorld篇(EJB都是建立在rmi基础之上的)
    Swing框架之Model
    EJB 工作原理
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11780941.html
Copyright © 2020-2023  润新知