簡體   English   中英

在 flask shell 中運行 flask 應用程序時出現 AttributeError

[英]AttributeError when running a flask app in flask shell

我已經完成了 flask 應用程序。 當我通過python run.py運行它時,該應用程序可以完美運行。

But when I want to open flask shell by flask shell or even just flask , it tell me:

Traceback (most recent call last):
  File "f:\programs\anaconda\envs\web\lib\site-packages\flask\cli.py", line 556, in list_commands
    rv.update(info.load_app().cli.list_commands(ctx))
  File "f:\programs\anaconda\envs\web\lib\site-packages\flask\cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "f:\programs\anaconda\envs\web\lib\site-packages\flask\cli.py", line 257, in locate_app
    return find_best_app(script_info, module)
  File "f:\programs\anaconda\envs\web\lib\site-packages\flask\cli.py", line 83, in find_best_app
    app = call_factory(script_info, app_factory)
  File "f:\programs\anaconda\envs\web\lib\site-packages\flask\cli.py", line 117, in call_factory
    return app_factory(script_info)
  File "C:\Users\zkhp\Desktop\flask-bigger-master\backend\startup.py", line 41, in create_app
    app.config['SECRET_KEY'] = config.get('secret', '!secret!')
AttributeError: 'ScriptInfo' object has no attribute 'get'

最后一句話在這里:

def create_app(config):
    app = Flask(
        __name__,
        template_folder=template_folder,
        static_folder=static_folder
    )
    app.config['SECRET_KEY'] = config.get('secret', '!secret!')

config是一個字典,由下式給出:

def start_server(run_cfg=None, is_deploy=False):
    config = {
        'use_cdn': False,
        'debug': run_cfg.get('debug', False),
        'secret': md5('!secret!'),
        'url_prefix': None,
        'debugtoolbar': True
    }
    app = create_app(config)

我對字典config如何轉換為 ScriptInfo 感到困惑?

我應該怎么做才能解決這個問題?

現在我解決了這個問題。

我有一個文件manage.py來處理所有 shell 命令行。 於是輸入了正確的操作:

python manage.py shell

現在它可以正常工作了。 (好吧,我還是不知道為什么……)

看到您已經解決了初始查詢,我想建議為您未來的 flask 應用程序編寫更好的結構化配置,這樣在您的應用程序變得更大的情況下也可以更輕松地添加更多配置變量。

考慮將配置放在自己的模塊中,最好放在應用程序根文件夾中的文件夾名稱instance中。 這是一個示例。

"""
This module sets the configurations for the application
"""
import os


class Config(object):
    """Parent configuration class."""
    DEBUG = False
    CSRF_ENABLED = True
    SECRET_KEY = os.getenv("SECRET_KEY")
    DATABASE_URL = os.getenv("DATABASE_URL")
    BUNDLE_ERRORS = True


class DevelopmentConfig(Config):
    """Development phase configurations"""
    DEBUG = True


class TestingConfig(Config):
    """Testing Configurations."""
    TESTING = True
    DEBUG = True
    DATABASE_URL = os.getenv("DATABASE_TEST_URL")


class ReleaseConfig(Config):
    """Release Configurations."""
    DEBUG = False
    TESTING = False


app_config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'release': ReleaseConfig,
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM