我正在按照指南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
模式?
答案 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
中的 DEBUG
和 config.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
一样。我认为这是一个烧瓶错误。