正确的方法使用Flask配置从\u obj

2024-09-29 21:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Flask中使用调试模式,但每次都会崩溃。纽约配置.py文件如下所示:

class Config(object):
    DEBUG = False
    DEVELOPMENT = False
    SECRET_KEY = 'do-i-really-need-this'
    FLASK_SECRET = SECRET_KEY
    SQLALCHEMY_DATABASE_URI = 'host'


class DevConfig(Config):
    DEVELOPMENT = True
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'host2'

然后,init.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()


def create_app():
    """Construct the core application."""
    app = Flask(__name__, instance_relative_config=False)
    app.config.from_object('config.DevConfig')
    db.init_app(app)

    with app.app_context():
        # Imports
        from . import routes

        # Create tables for our models
        db.create_all()

        return app

最后,运行文件:

from application import create_app

app = create_app()

if __name__ == "__main__":
    app.run(host='0.0.0.0')

当我尝试运行它时,出现以下错误:

 * Serving Flask app "application" (lazy loading)
 * Environment: production
 WARNING: This is a development server. Do not use it in a production deployment.
 Use a production WSGI server instead.
* Debug mode: on
INFO:werkzeug: * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
Traceback (most recent call last):

File "<ipython-input-1-aaa9539d5209>", line 1, in <module>
runfile('/home/vladimir.balayan/Desktop/scipts/UX/flasksqlalchemy-tutorial-master/wsgi.py', wdir='/home/vladimir.balayan/Desktop/scipts/UX/flasksqlalchemy-tutorial-master')

File "/home/vladimir.balayan/anaconda3/envs/wbe-testing/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 827, in runfile
execfile(filename, namespace)

File "/home/vladimir.balayan/anaconda3/envs/wbe-testing/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "/home/vladimir.balayan/Desktop/scipts/UX/flasksqlalchemy-tutorial-master/wsgi.py", line 11, in <module>
app.run(host='0.0.0.0')

File "/home/vladimir.balayan/anaconda3/envs/wbe-testing/lib/python3.7/site-packages/flask/app.py", line 990, in run
run_simple(host, port, self, **options)

File "/home/vladimir.balayan/anaconda3/envs/wbe-testing/lib/python3.7/site-packages/werkzeug/serving.py", line 1007, in run_simple
run_with_reloader(inner, extra_files, reloader_interval, reloader_type)

File "/home/vladimir.balayan/anaconda3/envs/wbe-testing/lib/python3.7/site-packages/werkzeug/_reloader.py", line 332, in run_with_reloader
sys.exit(reloader.restart_with_reloader())

File "/home/vladimir.balayan/anaconda3/envs/wbe-testing/lib/python3.7/site-packages/werkzeug/_reloader.py", line 159, in restart_with_reloader
args = _get_args_for_reloading()

File "/home/vladimir.balayan/anaconda3/envs/wbe-testing/lib/python3.7/site-packages/werkzeug/_reloader.py", line 76, in _get_args_for_reloading
if __main__.__package__ is None:

AttributeError: module '__main__' has no attribute '__package__'

我已经安装了python-dotenv模块并用FLASK_ENV=development创建了.env文件,但错误是相同的。你知道吗

我使用Spyder IDE进行调试和this tutorial


Tags: runinpyapphomeliblinetesting
1条回答
网友
1楼 · 发布于 2024-09-29 21:23:02

如果您的应用程序结构与下面的教程中所示的相同,请尝试将config.py更改为

from os import environ, path

basedir = path.abspath(path.dirname(__file__))


class Config(object):
    DEBUG = False
    DEVELOPMENT = False
    SECRET_KEY = environ.get('SECRET_KEY') or \
        '\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
    FLASK_SECRET = SECRET_KEY


class DevConfig(Config):
    DEVELOPMENT = True
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = environ.get('SQLALCHEMY_DATABASE_URI') or \
        'sqlite:///' + os.path.join(basedir, 'db.sqlite')


class ProdConfig(Config):
    DEVELOPMENT = True
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = environ.get('SQLALCHEMY_DATABASE_URI') or \
        'sqlite:///' + os.path.join(basedir, 'db.sqlite')


config = {
    'dev': DevConfig,
    'prod': ProdConfig,
    'default': DevConfig,
}

然后你的__init__.py到这个

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config

db = SQLAlchemy()


def create_app(config_name):
    """Construct the core application."""
    app = Flask(__name__)
    app.config.from_object(config.get(config_name, 'default'))
    db.init_app(app)

    with app.app_context():
        # Imports
        from . import routes

        # Create tables for our models
        db.create_all()

        return app

然后在您的run.py或任何您用来启动应用程序的文件中,您可以这样做

from os import environ
from application import create_app

app = create_app(environ.get('FLASK_CONFIG'))

if __name__ == "__main__":
    app.run(host='0.0.0.0')

希望这有帮助。你知道吗

相关问题 更多 >

    热门问题