配置
到目前为止,这个应用程序都非常简单,因此我不需要考虑它的 配置 。 但是,除了最简单的应用,你会发现 Flask(也可能是 Flask 插件)为使用者提供了一些可自由配置的选项。你需要决定传入什么样的配置变量列表到框架中。
有几种途径来为应用指定配置选项。最基本的解决方案是使用 app.config
对象,它是一个类似字典的对象,可以将配置以键值的方式存储其中。例如,你可以这样做:
app = Flask(__name__)
app.config['SECRET_KEY'] = 'you-will-never-guess'
# ... add more variables here as needed
上面的代码虽然可以为应用创建配置,但是我有 松耦合 的癖好。因此,我不会让配置和应用代码处于同一个部分,而是使用稍微复杂点的结构,将配置保存到一个单独的文件中。
使用类来存储配置变量,才是我真正的风格。我会将这个配置类存储到单独的 Python 模块,以保持良好的组织结构。下面就让你见识一下这个存储在顶级目录下,名为 config.py 的模块的配置类吧:
import os
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
简单的不像话,有没有? 配置设置被定义为 Config
类中的属性。 一旦应用程序需要更多配置选项,直接依样画葫芦,附加到这个类上即可,稍后如果我发现需要多个配置集,则可以创建它的子类。现在则不用操心。
SECRET_KEY
是我添加的唯一配置选项,对大多数 Flask 应用来说,它都是极其重要的。Flask 及其一些扩展使用密钥的值作为加密密钥,用于生成签名或令牌。Flask-WTF 插件使用它来保护网页表单免受名为 Cross-Site Request Forgery 或 CSRF(发音为“seasurf”)的恶意攻击。顾名思义,密钥应该是隐密的,因为由它产生的令牌和签名的加密强度保证,取决于除了可信维护者之外,没有任何人能够获得它。
密钥被定义成由 or
运算符连接两个项的表达式。第一个项查找环境变量 SECRET_KEY
的值,第二个项是一个硬编码的字符串。这种首先检查环境变量中是否存在这个配置,找不到的情况下就使用硬编码字符串的配置变量的模式你将会反复看到。在开发阶段,安全性要求较低,因此可以直接使用硬编码字符串。但是,当应用部署到生产服务器上的时候,我将设置一个独一无二且难以揣摩的环境变量,这样,服务器就拥有了一个别人未知的安全密钥了。
拥有了这样一份配置文件,我还需要通知 Flask 读取并使用它。可以在生成 Flask 应用之后,利用 app.config.from_object()
方法来完成这个操作:
from flask import Flask
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
from app import routes
导入 Config
类的方式,乍一看可能会让人感到困惑,不过如果你注意到从 flask
包导入 Flask
类的过程,就会发现这其实是类似的操作。 显而易见,小写的“config”是 Python 模块 config.py 的名字,另一个含有大写“C”的是类。
正如我上面提到的,可以使用 app.config
中的字典语法来访问配置项。 在下面的 Python 交互式会话中,你可以看到密钥的值:
>>> from microblog import app
>>> app.config['SECRET_KEY']
'you-will-never-guess'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论