Flask——配置操作

简介

应用程序需要某种配置。根据应用程序环境的不同,您可能需要更改不同的设置,比如切换调试模式、设置密钥以及其他与环境相关的设置。

Flask的设计方法通常要求在应用程序启动时配置可用。您可以在代码中硬编码配置,这对于许多小型应用程序实际上并没有那么糟糕,但是有更好的方法。

与加载配置的方式无关,有一个配置对象可用,它保存加载的配置值:Flask对象的配置属性。这是Flask本身放置某些配置值的地方,扩展也可以在这里放置它们的配置值。但这里也可以有自己的配置。

基本配置

更改config类方法
配置实际上是字典的子类,可以像修改任何字典一样修改:

app = Flask(__name__)
app.config['TESTING'] = True

某些配置值也被转发到Flask对象,所以你可以从那里读写它们:

app.testing = True

要同时更新多个键,可以使用dict.update()方法:

app.config.update(
    TESTING=True,
    SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/'
)

环境和调试特性

ENV和DEBUG配置值很特殊,因为如果在应用程序开始设置后更改它们,它们的行为可能不一致。为了可靠地设置环境和调试模式,Flask使用了环境变量

环境用于向Flask、扩展和其他程序(如哨兵程序)表明Flask运行在什么上下文中。它由FLASK_ENV环境变量控制,默认值为production。

将FLASK_ENV设置为development将启用调试模式。默认情况下,在调试模式下,Flask运行将使用交互式调试器和重新加载器。要将其与环境分开控制,请使用FLASK_DEBUG标志。

在1.0版本中更改:添加FLASK_ENV来独立于调试模式控制环境。开发环境启用调试模式。

若要将Flask切换到开发环境并启用调试模式,请设置FLASK_ENV:

$ export FLASK_ENV=development
$ flask run

在windows中使用set
建议使用上面描述的环境变量。虽然可以在配置或代码中设置ENVDEBUG,但强烈建议不要这样做。Flask命令不能早期读取它们,而且一些系统或扩展可能已经根据先前的值配置了自己。

内联配置的值

Flask内部使用的配置值如下:
ENV
应用程序运行在什么环境中。Flask和扩展可以基于环境启用行为,比如启用调试模式。env属性映射到这个配置键。这是由FLASK_ENV环境变量设置的,如果在代码中设置该变量,它的行为可能不像预期的那样。
在生产环境中部署时不要启用开发。
默认值:“生产”

DEBUG
是否启用调试模式。当使用flask run启动开发服务器时,将显示一个交互式调试器,用于未处理的异常,当代码发生变化时,将重新加载服务器。debug属性映射到这个配置键。当ENV为“development”并被FLASK_DEBUG环境变量覆盖时,将启用此功能。如果在代码中设置它,它的行为可能不像预期的那样。
在生产环境中部署时,不要启用调试模式。
默认值:如果ENV是“development”,则为True,否则为False。

TESTING
**启动测试模式。**异常是由应用程序的错误处理程序传播而不是处理的。扩展也可以改变它们的行为,以方便更容易的测试。您应该在自己的测试中启用它。
默认值:False

PROPAGATE_EXCEPTIONS
异常会重新引发,而不是由应用程序的错误处理程序处理。如果没有设置,如果启用了测试或调试,这将是隐式正确的。
默认值:None

PRESERVE_CONTEXT_ON_EXCEPTION
当异常发生时,不要**弹出请求上下文。**如果未设置,如果DEBUG为true,则为true。这允许调试器对错误内省请求数据,通常不需要直接设置。
默认值:None

TRAP_HTTP_EXCEPTIONS
如果没有HTTPException-type异常的处理程序,则将其重新引发,由交互式调试器处理,而不是将其作为简单的错误响应返回。
默认值:False

TRAP_BAD_REQUEST_ERRORS
试图从argsform等请求字典访问不存在的键将返回400个错误请求页面。使其将错误视为未处理的异常,以便获得交互式调试器。这是TRAP_HTTP_EXCEPTIONS的更具体版本。如果未设置,则在调试模式下启用。
默认值:None

SECRET_KEY
**用于安全签名会话cookie的密钥,**可以用于扩展或应用程序的任何其他安全相关需求。它应该是一个很长的随机字节字符串,不过unicode也可以接受。例如,复制输出到你的配置:

python -c 'import os; print(os.urandom(16))'
b'_5#y2L"F4Q8z\n\xec]/'

在发布问题或提交代码时,不要泄露密钥。
默认值:None

SESSION_COOKIE_NAME
会话cookie的名称。如果您已经有一个同名的cookie,则可以更改。
默认值:“session”

SESSION_COOKIE_DOMAIN
会话cookie将对其有效的域匹配规则。如果没有设置,cookie将对SERVER_NAME的所有子域都有效。如果为False, cookie的域将不被设置。
默认值:None

SESSION_COOKIE_PATH
会话cookie的有效路径。如果没有设置,cookie将在APPLICATION_ROOT下有效,或者/如果没有设置的话。
默认值:None

SESSION_COOKIE_HTTPONLY
为了安全起见,浏览器不允许JavaScript访问标记为“仅HTTP”的cookie。
默认值:True

SESSION_COOKIE_SECURE
只有当cookie标记为“secure”时,**浏览器才会通过HTTPS发送带有请求的cookie。**应用程序必须通过HTTPS提供服务,这样才有意义。
默认值:False

SESSION_COOKIE_SAMESITE
限制cookie如何与来自外部站点的请求一起发送。可以设置为“Lax”(推荐)或“Strict”。看到set - cookie选项。
默认值:None
新版本1.0。
更新日志

PERMANENT_SESSION_LIFETIME
如果会话。永久为真,cookie的过期将在未来设置此秒数。可以是datetime。时间增量或者int。
Flask的默认cookie实现验证密码签名的年龄不超过这个值。
默认值:时间增量(天=31)(2678400秒)

SESSION_REFRESH_EACH_REQUEST
控制会话时cookie是否与每个响应一起发送。永久是正确的。每次发送cookie(默认值)可以更可靠地防止会话过期,但是会使用更多的带宽。非常任理事国会议不受影响。
默认值:True

USE_X_SENDFILE
在提供文件时,设置X-Sendfile头,而不是使用Flask提供数据。一些web服务器,如Apache,可以识别这一点,并更有效地提供数据。这只有在使用这样的服务器时才有意义。
默认值:False

猜你喜欢

转载自blog.csdn.net/xiabenshu/article/details/89116861
今日推荐