Flask忽略配置导入



我的基本Flask应用程序结构是…

/.env
/config.py
/app.py
/app/__init__.py

我使用的是python dotenv,/.env的内容是。。。


FLASK_APP = app.py
DATABASE_URL = 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXX'
SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXX'
SECRET_KEY = '0123456789'
And /.config.py looks as follows...
"""Flask configuration."""
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):
CSRF_ENABLED = True
SQLALCHEMY_TRACK_MODIFICATIONS = False
STATIC_FOLDER = 'static'
TEMPLATES_FOLDER = 'templates'
SQLALCHEMY_TRACK_MODIFICATIONS = False

SQLALCHEMY_DATABASE_URI = environ.get('DATABASE_URL')
SECRET_KEY = environ.get('SECRET_KEY')

class DevelopmentConfig(Config):
FLASK_ENV = "development"
DEBUG = True
TESTING = True
DEVELOPMENT = True


class ProductionConfig(Config):
FLASK_ENV = "production"
DEBUG = False
TESTING = False
DEVELOPMENT = False

最后,/app/init.py


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config, DevelopmentConfig, ProductionConfig

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

db = SQLAlchemy(app)
migrate = Migrate(app, db)

from app import routes

print(app.config, flush=True)

当我在父文件夹中flask run时,我会收到下面的输出。它在生产模式下运行,即使app.config的打印输出显示正在设置FLASK_ENV和DEBUG等。

我做错了什么?


$ flask run
* Serving Flask app "kwtr2.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
<Config {'ENV': 'production', 'DEBUG': True, 'TESTING': True, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': '0123456789', 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093, 'CSRF_ENABLED': True, 'DEVELOPMENT': True, 'FLASK_ENV': 'development', 'SQLALCHEMY_DATABASE_URI': 'postgresql://postgres:postgres@localhost:XXXX/XXXXXXXXXXX', 'SQLALCHEMY_TRACK_MODIFICATIONS': False, 'STATIC_FOLDER': 'static', 'TEMPLATES_FOLDER': 'templates', 'SQLALCHEMY_BINDS': None, 'SQLALCHEMY_NATIVE_UNICODE': None, 'SQLALCHEMY_ECHO': False, 'SQLALCHEMY_RECORD_QUERIES': None, 'SQLALCHEMY_POOL_SIZE': None, 'SQLALCHEMY_POOL_TIMEOUT': None, 'SQLALCHEMY_POOL_RECYCLE': None, 'SQLALCHEMY_MAX_OVERFLOW': None, 'SQLALCHEMY_COMMIT_ON_TEARDOWN': False, 'SQLALCHEMY_ENGINE_OPTIONS': {}}>
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

提前谢谢!

Keith

您没有在应用程序实例中导入config模块

# __init__.py
from config import Config, DevelopmentConfig, ProductionConfig
app = Flask(__name__)
app.config.from_object(<your-config-class>)
# ...

最新更新