【问题标题】:Flask not reading Secret_key when FLASK_ENV = 'production'当 FLASK_ENV = 'production' 时,Flask 不读取 Secret_key
【发布时间】:2021-10-14 10:11:49
【问题描述】:

我有一个简单的 Flask 应用程序,其配置文件具有 Config、Prod 和 Debug 类。我在项目根文件夹中有一个 .env ,其中包含秘密。当我使用 Debug 进行配置时,它会读取密钥。但是当我将它设置为使用 Prod 时,它会抱怨:

RuntimeError:会话不可用,因为未设置密钥。将应用程序上的 secret_key 设置为唯一且机密的内容。

我没有使用会话。这是 Config.py 的代码:

from os import environ, path
from dotenv import load_dotenv

basedir = path.abspath(path.dirname(__file__))
load_dotenv(path.join(basedir, '.env'))


class Config:
    SECRET_KEY = environ.get('SECRET_KEY')
    SQLALCHEMY_DATABASE_URI = environ.get('DB_URI')

class ProdConfig(Config):
    FLASK_ENV = 'production'
    DEBUG = False
    TESTING = False

class DevConfig(Config):
    FLASK_ENV = 'development'
    DEBUG = True
    TESTING = True

这里是 init.py

def create_app(config_class=ProdConfig):
    flask_app = Flask(__name__)
    flask_app.config.from_object(config_class)

这是我用来运行项目的 run.py:

from server import create_app
from server.config import DevConfig

app = create_app()
# app = create_app(DevConfig)
csrf.init_app(app)

if __name__ == '__main__':
    app.run()

使用 DevConfig 时它可以正常工作,但不能使用 ProdConfig。谢谢

【问题讨论】:

    标签: flask


    【解决方案1】:
    from os import environ, path
    from dotenv import load_dotenv
    
    basedir = path.abspath(path.dirname(__file__))
    load_dotenv(path.join(basedir, '.env'))
    
    
    class Config(object):
        SECRET_KEY = environ.get('SECRET_KEY')
        SQLALCHEMY_DATABASE_URI = environ.get('DB_URI')
    
    class ProdConfig(Config):
        SECRET_KEY = environ.get('SECRET_KEY_FOR_PROD')
        FLASK_ENV = 'production'
        DEBUG = False
        TESTING = False
    
    class DevConfig(Config):
        FLASK_ENV = 'development'
        DEBUG = True
        TESTING = True
    

    app.py

    def create_app():
        flask_app = Flask(__name__)
        flask_app.config.from_object(config.ProdConfig)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2016-01-12
      • 2022-12-22
      • 2016-04-26
      • 2013-10-08
      相关资源
      最近更新 更多