Flask应用未正确使用配置文件设置

时间:2018-09-21 21:16:12

标签: python flask

我正在按照指南here尝试为我的Flask应用设置创建config.py文件,但该文件无法正常工作。

from flask import Flask

# creates the application
def create_app():

    app = Flask(__name__)
    app.config.from_object('instance.config.DevelopmentConfig')

    # home
    @app.route('/')
    def home():
        return str(app.config['DEBUG']) # displays 'False'
        # return str(app.config['SECRET_KEY']) -- displays 'dev'

    return app

我的instance/config.py文件

class DevelopmentConfig(object):
    ENV = 'development'
    DEBUG = True
    SECRET_KEY = 'dev'

当我执行flask run时,它将在调试关闭的情况下运行生产服务器。我没有使用export FLASK_ENV,因为在您拥有config.py文件时,我不需要使用它。

我的假设错了吗?为什么它能正确记录app.config['SECRET_KEY']而不是DEBUG模式?

5 个答案:

答案 0 :(得分:1)

我有同样的问题。我发现使用python run.py代替flask run都可以正常工作。

答案 1 :(得分:1)

根据文档here,您不应通过代码设置“调试”和“ ENV”,否则,某些扩展程序可能会误解并意外地采取行动。

您仍然可以通过代码进行设置,并且可以使用“ python main.py”之类的东西来工作,但是再次根据文档...

虽然可以在配置或代码中设置ENV和DEBUG,但强烈建议不要这样做。 flask命令无法尽早读取它们,并且某些系统或扩展程序可能已经根据先前的值进行了配置。

正确的操作方式是使用您的终端

Linux:

export FLASK_ENV=development
flask run

Windows:

set FLASK_ENV=development
flask run

您的config.py文件应该与您的数据库和API秘密密钥更相关。

答案 2 :(得分:1)

在网上学习许多教程时遇到了同样的问题。尝试设置 FLASK_ENV=development,但仍然无效。

最终删除了 ENV 中的 DEBUGconfig.py 语句,并在终端中输入 $env:FLASK_ENV='development',它最终与 'flask run' 一起工作

如果您和我一样刚接触 Flask,建议尝试 $env:FLASK_ENV='development'。 也许一些专家可以帮助解释为什么只有这对我有用..

答案 3 :(得分:0)

几周前我遇到了同样的问题。我这样解决了我的问题:

from flask import Flask
from instance.config import DevelopmentConfig # import config object


# creates the application
def create_app():

    app = Flask(__name__)
    app.config.from_object(DevelopmentConfig)

    # code ...

    return app  

答案 4 :(得分:0)

我正在使用的解决方案是在代码中设置os.environ['FLASK_ENV']变量。

from flask import Flask

# creates the application
def create_app():

    app = Flask(__name__)
    app.config.from_object('instance.config.DevelopmentConfig')

    # home
    @app.route('/')
    def home():
        return str(app.config['DEBUG']) # displays 'False'
        # return str(app.config['SECRET_KEY']) -- displays 'dev'

    return app

我的instance/config.py文件

import os

class DevelopmentConfig(object):
    ENV = 'development'
    DEBUG = True
    SECRET_KEY = 'dev'
# file: commands.py
import os

import click
from click import pass_context
from flask.cli import with_appcontext, run_command

from flask import current_app

@click.command('serve', context_settings={"ignore_unknown_options": True})
@with_appcontext
@click.argument('args', nargs=-1)
def serve(args):
    """Alias for 'flask run'."""
    os.environ['FLASK_ENV'] = current_app.config['ENV']
    ctx = run_command.make_context('serve', list(args))
    run_command.invoke(ctx)
# file: wsgi.py
# +++++++++++ FLASK +++++++++++
# This file lets you run 'flask' commands (e.g. flask routes)

# noinspection PyUnresolvedReferences
from app import app as application  # noqa

现在flask serve的行为与我预期的flask run一样。我认为这是一个烧瓶错误。