lask 是一个非常灵活且短小精干的 web 框架 , 那么灵活性从什么地方体现呢?
Flask 配置
App.config["DEBUG"] = True
代码只要发生改动, 自动重启 Flask 程序(App.run)
在控制台打印的信息非常全面
- App = Flask(__name__)
- App.config['DEBUG']= True
- App.default_config
DEBUG --- 编码阶段 代码重启 日志输出级别很低 页面中会显示错误 错误代码
TESTING --- 测试阶段 日志输出级别较高 无限接近线上环境
Flask 的配置就是在 App.config 中添加一个键值对, 但是你存进去的键必须是 config 中应该存在的, 如果不再存在的话, 它会默认无用, 就这么放着
- {
- 'DEBUG': False, # 是否开启 Debug 模式
- 'TESTING': False, # 是否开启测试模式
- 'PROPAGATE_EXCEPTIONS': None, # 异常传播(是否在控制台打印 LOG) 当 Debug 或者 testing 开启后, 自动为 True
- 'PRESERVE_CONTEXT_ON_EXCEPTION': None, # 一两句话说不清楚, 一般不用它
- 'SECRET_KEY': None, # 之前遇到过, 在启用 Session 的时候, 一定要有它
- 'PERMANENT_SESSION_LIFETIME': 31, # days , Session 的生命周期 (天) 默认 31 天
- 'USE_X_SENDFILE': False, # 是否弃用 x_sendfile
- 'LOGGER_NAME': None, # 日志记录器的名称
- 'LOGGER_HANDLER_POLICY': 'always',
- 'SERVER_NAME': None, # 服务访问域名
- 'APPLICATION_ROOT': None, # 项目的完整路径
- 'SESSION_COOKIE_NAME': 'session', # 在 cookies 中存放 session 加密字符串的名字
- 'SESSION_COOKIE_DOMAIN': None, # 在哪个域名下会产生 session 记录在 cookies 中
- 'SESSION_COOKIE_PATH': None, # cookies 的路径
- 'SESSION_COOKIE_HTTPONLY': True, # 控制 cookie 是否应被设置 httponly 的标志,
- 'SESSION_COOKIE_SECURE': False, # 控制 cookie 是否应被设置安全标志
- 'SESSION_REFRESH_EACH_REQUEST': True, # 这个标志控制永久会话如何刷新
- 'MAX_CONTENT_LENGTH': None, # 如果设置为字节数, Flask 会拒绝内容长度大于此值的请求进入, 并返回一个 413 状态码
- 'SEND_FILE_MAX_AGE_DEFAULT': 12, # hours 默认缓存控制的最大期限
- 'TRAP_BAD_REQUEST_ERRORS': False,
- # 如果这个值被设置为 True ,Flask 不会执行 HTTP 异常的错误处理, 而是像对待其它异常一样,
- # 通过异常栈让它冒泡地抛出. 这对于需要找出 HTTP 异常源头的可怕调试情形是有用的.
- 'TRAP_HTTP_EXCEPTIONS': False,
- # Werkzeug 处理请求中的特定数据的内部数据结构会抛出同样也是 "错误的请求" 异常的特殊的 key errors .
- # 同样地, 为了保持一致, 许多操作可以显式地抛出 BadRequest 异常.
- # 因为在调试中, 你希望准确地找出异常的原因, 这个设置用于在这些情形下调试.
- # 如果这个值被设置为 True , 你只会得到常规的回溯.
- 'EXPLAIN_TEMPLATE_LOADING': False,
- 'PREFERRED_URL_SCHEME': 'http', # 生成 URL 的时候如果没有可用的 URL 模式话将使用这个值
- 'JSON_AS_ASCII': True,
- # 默认情况下 Flask 使用 ascii 编码来序列化对象. 如果这个值被设置为 False ,
- # Flask 不会将其编码为 ASCII, 并且按原样输出, 返回它的 unicode 字符串.
- # 比如 jsonfiy 会自动地采用 utf-8 来编码它然后才进行传输.
- 'JSON_SORT_KEYS': True,
- #默认情况下 Flask 按照 JSON 对象的键的顺序来序来序列化它.
- # 这样做是为了确保键的顺序不会受到字典的哈希种子的影响, 从而返回的值每次都是一致的, 不会造成无用的额外 HTTP 缓存.
- # 你可以通过修改这个配置的值来覆盖默认的操作. 但这是不被推荐的做法因为这个默认的行为可能会给你在性能的代价上带来改善.
- 'JSONIFY_PRETTYPRINT_REGULAR': True,
- 'JSONIFY_MIMETYPE': 'application/json',
- 'TEMPLATES_AUTO_RELOAD': None,
- }
以上这些 Key, 都可以被改写, 当然他们也都是有默认值存在的, 如果没有特殊情况, 不要改写它的默认值
修改配置的方式大约是两种
1. 直接对 App.config 进行修改
App.config["DEBUG"] = True
2. 使用类的方式导入
首先要有一个 settings.py 的文件
- class Debugsetting(object):
- DEBUG = True
- SECRET_KEY = 'AAA'
- SESSION_COOKIE_NAME = 'debug session'
- class TestingSetting(object):
- TESTING = True
- SECRET_KEY = "BBB"
- SESSION_COOKIE_NAME = "testing session"
然后我们在 Flask 的启动文件中就可以这么写
- from flask import Flask, jsonify
- from settings import Debugsetting
- from settings import TestingSetting
- App = Flask(__name__)
- # App.config.from_object(Debugsetting)
- App.config.from_object(TestingSetting)
- @App.route("/info", methods=["GET", "POST"])
- def info():
- return jsonify({'a': 12})
- if __name__ == '__main__':
- print(App.config)
- App.run('0.0.0.0', 5000)
那么在 Flask 实例化的时候, 传递的参数是什么呢?
其实可以理解为对 Flask 实例进行的初始配置
- static_folder = 'static', # 静态文件目录的路径 默认当前项目中的 static 目录
- static_host = None, # 远程静态文件所用的 Host 地址, 默认为空
- static_url_path = None, # 静态文件目录的 url 路径 默认不写是与 static_folder 同名, 远程静态文件时复用
- # host_matching 是否开启 host 主机位匹配, 是要与 static_host 一起使用, 如果配置了 static_host, 则必须赋值为 True
- # 这里要说明一下,@App.route("/",host="localhost:5000") 就必须要这样写
- # host="localhost:5000" 如果主机头不是 localhost:5000 则无法通过当前的路由
- host_matching = False, # 如果不是特别需要的话, 慎用, 否则所有的 route 都需要 host="" 的参数
- subdomain_matching = False, # 理论上来说是用来限制 SERVER_NAME 子域名的, 但是目前还没有感觉出来区别在哪里
- template_folder = 'templates' # template 模板目录, 默认当前项目中的 templates 目录
- instance_path = None, # 指向另一个 Flask 实例的路径
- instance_relative_config = False # 是否加载另一个实例的配置
- root_path = None # 主模块所在的目录的绝对路径, 默认项目目录
static_folder 静态文件目录的路径 static_url_path 静态文件目录的 url 路径
- from flask import Flask, jsonify, render_template
- App = Flask(__name__, static_folder='statics', static_url_path="/aaa")
- @App.route("/info", methods=["GET", "POST"])
- def info():
- return render_template("info.html")
- if __name__ == '__main__':
- # print(App.config)
- App.run('0.0.0.0', 5000)
- <!DOCTYPE HTML>
- <HTML lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
info 界面
- <img src="/aaa/12.png" alt="">
- </body>
- </HTML>
常用参数
- static_folder = 'static', # 静态文件目录的路径 默认当前项目中的 static 目录
- static_url_path = None, # 静态文件目录的 url 路径 默认不写是与 static_folder 同名, 远程静态文件时复用
- template_folder = 'templates' # template 模板目录, 默认当前项目中的 templates 目录
来源: http://www.bubuko.com/infodetail-3120545.html