config 介绍
config
实际上是字典的一个子类且能够像字典一样被修改,它是Flask自身放置特定配置的地方高理也是扩展放置它们配置值的地方。当然也可以放置你自己的配置。
config内容:
# print(app.config)
{'APPLICATION_ROOT': None,
'DEBUG': True,
'EXPLAIN_TEMPLATE_LOADING': False,
'JSONIFY_MIMETYPE': 'application/json',
'JSONIFY_PRETTYPRINT_REGULAR': True,
'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True,
'LOGGER_HANDLER_POLICY': 'always',
'LOGGER_NAME': 'flask_bbs',
'MAX_CONTENT_LENGTH': None,
'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31),
'PREFERRED_URL_SCHEME': 'http',
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'PROPAGATE_EXCEPTIONS': None,
'SECRET_KEY': None,
'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200),
'SERVER_NAME': None,
'SESSION_COOKIE_DOMAIN': None,
'SESSION_COOKIE_HTTPONLY': True,
'SESSION_COOKIE_NAME': 'session',
'SESSION_COOKIE_PATH': None,
'SESSION_COOKIE_SECURE': False,
'SESSION_REFRESH_EACH_REQUEST': True,
'SQLALCHEMY_BINDS': None,
'SQLALCHEMY_COMMIT_ON_TEARDOWN': False,
'SQLALCHEMY_DATABASE_URI': 'mysql+pymysql://root:haosql@127.0.0.1:3306/flask_bbs?charset=
utf8',
'SQLALCHEMY_ECHO': False,
'SQLALCHEMY_MAX_OVERFLOW': None,
'SQLALCHEMY_NATIVE_UNICODE': None,
'SQLALCHEMY_POOL_RECYCLE': None,
'SQLALCHEMY_POOL_SIZE': None,
'SQLALCHEMY_POOL_TIMEOUT': None,
'SQLALCHEMY_RECORD_QUERIES': None,
'SQLALCHEMY_TRACK_MODIFICATIONS': False,
'TEMPLATES_AUTO_RELOAD': True,
'TESTING': False,
'TRAP_BAD_REQUEST_ERRORS': False,
'TRAP_HTTP_EXCEPTIONS': False,
'USE_X_SENDFILE': False}
内置的配置值
官方文档地址 http://flask.pocoo.org/docs/1.0/config/
下列配置值是 Flask 内部使用的:
DEBUG |
启用/禁止调试模式 |
---|---|
TESTING |
启用/禁止测试模式 |
PROPAGATE_EXCEPTIONS |
显式地启用或者禁止异常的传播。 如果没有设置 或显式地设置为 None , 当 TESTING 或 DEBUG 为真时, 隐式为真。 |
PRESERVE_CONTEXT_ON_EXCEPTION |
默认情况下,如果应用工作在调试模式, 请求上下文不会在异常时出栈来允许调试器内省。 这可以通过这个键来禁用。 你同样可以用这个设定来强制启用它, 即使没有调试执行,这对调试生产应用很有用 (但风险也很大) |
SECRET_KEY |
密钥 |
SESSION_COOKIE_NAME |
会话 cookie 的名称 |
SESSION_COOKIE_DOMAIN |
会话 cookie 的域。如果没有设置的话, cookie将会对 SERVER_NAME 所有的子域都有效。 |
SESSION_COOKIE_PATH |
会话 cookie 的路径。如果没有设置或者没有为 '/' 设置,cookie 将会对所有的 APPLICATION_ROOT 有效。 |
SESSION_COOKIE_HTTPONLY |
控制 cookie 是否应被设置 httponly 的标志, 默认为 True 。 |
SESSION_COOKIE_SECURE |
控制 cookie 是否应被设置安全标志,默认为 False。 |
PERMANENT_SESSION_LIFETIME |
一个持久化的session 的生存时间,作为一个datetime.timedelta 对象。从 Flask0.8 开始 也可以用一个整数来表示秒。 |
USE_X_SENDFILE |
启用/禁止 x-sendfile |
LOGGER_NAME |
日志记录器的名称 |
SERVER_NAME |
服务器的名称以及端口,需要它为了支持子域名 (如: 'myapp.dev:5000' )。注意 localhost 是 不支持子域名的因此设置成 “localhost” 是无意义的。 设置 SERVER_NAME 默认会允许在没有请求上下文 而仅有应用上下文时生成 URL。 |
APPLICATION_ROOT |
如果应用不占用完整的域名或子域名, 这个选项可以被设置为应用所在的路径。 这个路径也会用于会话 cookie 的路径值。 如果直接使用域名,则留作 None 。 |
MAX_CONTENT_LENGTH |
如果设置为字节数, Flask 会拒绝内容长度大于 此值的请求进入,并返回一个 413 状态码。 |
SEND_FILE_MAX_AGE_DEFAULT : |
默认缓存控制的最大期限,以秒计, 在 send_static_file() (默认的静态文件处理器)和send_file() 中使用。 对于单个文件,覆盖这个值,使用 get_send_file_max_age() 勾住 Flask 或者 Blueprint 。 默认为 43200(12小时)。 |
TRAP_HTTP_EXCEPTIONS |
如果这个值被设置为 True , Flask 不会执行 HTTP 异常的错误处理, 而是像对待其它异常一样,通过异常栈让它冒泡。 这对于需要找出 HTTP 异常源头的可怕调试情形是有用的。 |
TRAP_BAD_REQUEST_ERRORS |
Werkzeug 处理请求中的特定数据的内部数据结构会 抛出同样也是“错误的请求”异常的特殊的 key errors 。 同样地,为了保持一致,许多操作可以 显式地抛出 BadRequest 异常。因为在调试中, 你希望准确地找出异常的原因, 这个设置用于在这些情形下调试。 如果这个值被设置为 True , 你只会得到常规的回溯。 |
PREFERRED_URL_SCHEME |
URL 模式用于 URL 生成。如果没有设置 URL 模式, 默认将为 http 。 |
JSON_AS_ASCII |
默认情况下 Flask 序列化对象成 ascii 编码的 JSON。 如果不对该配置项就行设置的话,Flask 将不会编码成 ASCII 保持字符串原样,并且返回 unicode 字符串。jsonfiy 会自动按照 utf-8 进行编码并且传输。 |
JSON_SORT_KEYS |
默认情况下 Flask 将会依键值顺序的方式序列化 JSON。 这样做是为了确保字典哈希种子的独立性,返回值将会一致不会造成 额外的 HTTP 缓存。通过改变这个变量可以重载默认行为。 这是不推荐也许会带来缓存消耗的性能问题。 |
JSONIFY_PRETTYPRINT_REGULAR |
如果设置成 True (默认下),jsonify 响应将会完美地打印。 |
怎样产生一个好的密钥:
随机的问题在于很难判断什么是真随机。一个密钥应该足够随机。你的操作系统可以基于一个密码随机生成器来生成漂亮的随机值,这个值可以用来做密钥:
>>> import os
>>> os.urandom(24)
'\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
把这个值复制粘贴到你的代码,你就搞定了密钥。
config加载
配置加载方式:
app = Flask(__name__)
app.config["DEBUG"] = True # 1. 直接更新 config
app.config.update( # 2.使用字典方法 update
"DEBUG": True,
"SECRET_KEY" = "XXXX"
)
app.config.from_pyfile('config.py') # 3. 加载配置文件()
import config
app.config.from_object(config) # 4. 使用导入的 config对象
- 使用
app.config.from_pyfile
的方式加载配置文件:
这种方式不需要import
,直接使用app.config.from_pyfile('config.py')
就可以了。
注意这个地方,必须要写文件的全名,后缀名不能少。
- 这种方式,加载配置文件,不局限于只能使用
py
文件,普通的txt
文件同样也适合。 - 这种方式,可以传递
silent=True
,那么这个静态文件没有找到的时候,不会抛出异常。
- 使用
app.config.from_object(obj)
从给定对象更新值。对象可以是以下两种类型之一:- 字符串:导入指定字符串名称的对象
- 实际对象的引用:直接导入对象
开启debug
- app.run(debug=True)
- app.debug = True
- app.config.update(DEBUG=True)
- app.config.from_object(‘config.py’) # 支持py文件;需要做为模块导入
- app.config.from_pyfile(‘config.py’,silent=False) # 支持py、txt文件;需要完整文件名+后缀名