config 介绍

config实际上是字典的一个子类且能够像字典一样被修改,它是Flask自身放置特定配置的地方高理也是扩展放置它们配置值的地方。当然也可以放置你自己的配置。

config内容:

  1. # print(app.config)
  2. {'APPLICATION_ROOT': None,
  3. 'DEBUG': True,
  4. 'EXPLAIN_TEMPLATE_LOADING': False,
  5. 'JSONIFY_MIMETYPE': 'application/json',
  6. 'JSONIFY_PRETTYPRINT_REGULAR': True,
  7. 'JSON_AS_ASCII': True,
  8. 'JSON_SORT_KEYS': True,
  9. 'LOGGER_HANDLER_POLICY': 'always',
  10. 'LOGGER_NAME': 'flask_bbs',
  11. 'MAX_CONTENT_LENGTH': None,
  12. 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31),
  13. 'PREFERRED_URL_SCHEME': 'http',
  14. 'PRESERVE_CONTEXT_ON_EXCEPTION': None,
  15. 'PROPAGATE_EXCEPTIONS': None,
  16. 'SECRET_KEY': None,
  17. 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200),
  18. 'SERVER_NAME': None,
  19. 'SESSION_COOKIE_DOMAIN': None,
  20. 'SESSION_COOKIE_HTTPONLY': True,
  21. 'SESSION_COOKIE_NAME': 'session',
  22. 'SESSION_COOKIE_PATH': None,
  23. 'SESSION_COOKIE_SECURE': False,
  24. 'SESSION_REFRESH_EACH_REQUEST': True,
  25. 'SQLALCHEMY_BINDS': None,
  26. 'SQLALCHEMY_COMMIT_ON_TEARDOWN': False,
  27. 'SQLALCHEMY_DATABASE_URI': 'mysql+pymysql://root:haosql@127.0.0.1:3306/flask_bbs?charset=
  28. utf8',
  29. 'SQLALCHEMY_ECHO': False,
  30. 'SQLALCHEMY_MAX_OVERFLOW': None,
  31. 'SQLALCHEMY_NATIVE_UNICODE': None,
  32. 'SQLALCHEMY_POOL_RECYCLE': None,
  33. 'SQLALCHEMY_POOL_SIZE': None,
  34. 'SQLALCHEMY_POOL_TIMEOUT': None,
  35. 'SQLALCHEMY_RECORD_QUERIES': None,
  36. 'SQLALCHEMY_TRACK_MODIFICATIONS': False,
  37. 'TEMPLATES_AUTO_RELOAD': True,
  38. 'TESTING': False,
  39. 'TRAP_BAD_REQUEST_ERRORS': False,
  40. 'TRAP_HTTP_EXCEPTIONS': False,
  41. '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 响应将会完美地打印。

怎样产生一个好的密钥:

随机的问题在于很难判断什么是真随机。一个密钥应该足够随机。你的操作系统可以基于一个密码随机生成器来生成漂亮的随机值,这个值可以用来做密钥:

  1. >>> import os
  2. >>> os.urandom(24)
  3. '\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'

把这个值复制粘贴到你的代码,你就搞定了密钥。

config加载

配置加载方式:

  1. app = Flask(__name__)
  2. app.config["DEBUG"] = True # 1. 直接更新 config
  3. app.config.update( # 2.使用字典方法 update
  4. "DEBUG": True,
  5. "SECRET_KEY" = "XXXX"
  6. )
  7. app.config.from_pyfile('config.py') # 3. 加载配置文件()
  8. import config
  9. app.config.from_object(config) # 4. 使用导入的 config对象
  • 使用app.config.from_pyfile的方式加载配置文件:

这种方式不需要import,直接使用app.config.from_pyfile('config.py')就可以了。
注意这个地方,必须要写文件的全名,后缀名不能少。

  1. 这种方式,加载配置文件,不局限于只能使用py文件,普通的txt文件同样也适合。
  2. 这种方式,可以传递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文件;需要完整文件名+后缀名