Flask app.config 的配置
原理如下:

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 # 动态监听⽇日志
Flask app.config 的配置的更多相关文章
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 如何修改 app.config 的配置信息
如何修改 app.config 的配置信息 收藏 最问这个问题的人有点多,其实 .Net 提供了这样的功能我们可以在 app.config 中 userSettings 节点中保存我们的应用程序设置信 ...
- Winform 数据库连接app.config文件配置 数据库连接字符串
1.添加配置文件 新建一个winform应用程序,类似webfrom下有个web.config,winform下也有个App.config;不过 App.config不是自动生成的需要手动添加,鼠标右 ...
- C# App.config 自定义 配置节 报错“配置系统未能初始化” 解决方法
App.config,结果运行的时候出现了 "配置系统未能初始化" 的错误.找了半天才发现是下面的原因造成的: "如果配置文件中包含configSections元素,则c ...
- C# app.config文件配置和修改
很多时候我们需要对系统的.config文件进度读写操作,例如:系统初始化的参数的更改.系统参数的改变都需要更新到配置文件. 首先我们有必要了解一下app.config.exe.config和vshos ...
- Winform数据库连接app.config文件配置
1.添加配置文件 新建一个winform应用程序,类似webfrom下有个web.config,winform下也有个App.config;不过 App.config不是自动生成的需要手动添加,鼠标右 ...
- c# 修改winform中app.config的配置值
public bool ChangeConfig(string AppKey,string AppValue) { bool result = true; try { XmlDocument xDoc ...
- c#Winform程序调用app.config文件配置数据库连接字符串
你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings name=" " connectionString= ...
- App.config:配置系统未能初始化的异常
如上图所示:App.config文件是这样配置的,在后台代码”ISchedulerFactory scheduler = new StdSchedulerFactory();“中抛出了异常 经网上查资 ...
随机推荐
- Struts2牛逼的拦截器,卧槽这才是最牛的核心!
struts 拦截器 一 拦截器简介及简单的拦截器实例 Struts2拦截器是在访问某个Action或者Action的某个方法,在字段前或者之后实施拦截,并且Struts2拦截器是可以插拔的,拦截器是 ...
- java 常用的解析工具
这里介绍两种 java 解析工具. 第一种:java 解析 html 工具 jsoup 第二种: java 解析 XML 工具 Dom4j jsoup jsoup是一个用于处理真实HTML的Java库 ...
- ffmpeg 时间戳
转http://blog.csdn.net/yfh1985sdq/article/details/5721953 AVpacket里的时间戳pts和dts.单位好像是us. 问 : 时间戳pts和dt ...
- Spring的Bean定义
以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-definition.html: Bean定义 被称作bean的对象是构成应用程序的支柱也 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律一:IT人生存之道-柔
老子在道德經裡頭曾提到:「天下之至柔,馳聘天下之至堅」,又說:「堅強者死之徒,柔弱者生之徒」.其實人在面對世間的萬事萬物都是一樣的,只是當我們學習將這個至理套用在IT的工作職場時,將可以讓我們在這條崎 ...
- android 获取屏幕宽高 和 获取控件坐标
一.获取屏幕宽高: (1). WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); int width ...
- 【转载】TCP的三次握手(建立连接)和四次挥手(关闭连接)
建立连接: 理解:窗口和滑动窗口TCP的流量控制 TCP使用窗口机制进行流量控制 什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端 接收方发送的确认信息中包 ...
- HDU 2049 不容易系列之(4)——考新郎 (递推,含Cmn公式)
不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 互斥锁和条件变量(pthread)相关函数
互斥锁 #include <pthread.h> // 若成功返回0,出错返回正的Exxx值 // mptr通常被初始化为PTHREAD_MUTEX_INITIALIZER int pth ...
- vue 计算属性与侦听器
侦听器:顾名思义,就是用来监听数据变化用的.侦听器在vue实例中,定义变量watch来使用.监听新值newVal和旧值oldVal,具体使用方法如下: <!DOCTYPE html> &l ...