Python文件使用Python命令运行,但不使用Flask

Python文件使用Python命令运行,但不使用Flask,python,flask,flask-restplus,Python,Flask,Flask Restplus,我有一个使用Flask和构建的小应用程序。我可以使用python app.py运行应用程序,flask服务器在端口8888上运行。我尝试使用set FLASK\u APP=APP.py运行该文件,并使用FLASK run运行该文件,它似乎正在运行,但没有打开我的炫耀页面。请给我一些建议 app.py import logging.config import os from flask import Flask, Blueprint from flask_cors import CORS fro

我有一个使用Flask和构建的小应用程序。我可以使用
python app.py
运行应用程序,flask服务器在端口8888上运行。我尝试使用
set FLASK\u APP=APP.py运行该文件,并使用
FLASK run
运行该文件,它似乎正在运行,但没有打开我的炫耀页面。请给我一些建议

app.py

import logging.config

import os
from flask import Flask, Blueprint
from flask_cors import CORS
from werkzeug.middleware.proxy_fix import ProxyFix
from src.config import default
from src.api.controllers.endpoints.users import ns as users_namespace
from src.api.controllers.endpoints.statuses import ns as status_namespace
from src.api import api
from src.database import db

app = Flask(__name__)
CORS(app)
app.wsgi_app = ProxyFix(app.wsgi_app)
logging_conf_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '../logging.conf'))
logging.config.fileConfig(logging_conf_path)
log = logging.getLogger(__name__)


def configure_app(flask_app):
    flask_app.config['SERVER_NAME'] = default.FLASK_SERVER_NAME
    flask_app.config['SQLALCHEMY_DATABASE_URI'] = default.SQLALCHEMY_DATABASE_URI
    flask_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = default.SQLALCHEMY_TRACK_MODIFICATIONS
    flask_app.config['SWAGGER_UI_DOC_EXPANSION'] = default.RESTPLUS_SWAGGER_UI_DOC_EXPANSION
    flask_app.config['RESTPLUS_VALIDATE'] = default.RESTPLUS_VALIDATE
    flask_app.config['RESTPLUS_MASK_SWAGGER'] = default.RESTPLUS_MASK_SWAGGER
    flask_app.config['ERROR_404_HELP'] = default.RESTPLUS_ERROR_404_HELP


def initialize_app(flask_app):
    configure_app(flask_app)

    blueprint = Blueprint('CovidAPI', __name__, url_prefix='/')
    api.init_app(blueprint)
    api.add_namespace(users_namespace)
    api.add_namespace(status_namespace)
    flask_app.register_blueprint(blueprint)

    db.init_app(flask_app)


def main():
    initialize_app(app)
    log.info('>>>>> Starting development server at http://{}/ <<<<<'.format(app.config['SERVER_NAME']))
    app.run(debug=default.FLASK_DEBUG)


if __name__ == "__main__":
    main()
使用python命令输出:

2020-04-29 10:25:42,519 - __main__ - INFO - >>>>> Starting development server at http://localhost:8888/ <<<<<
 * Serving Flask app "app" (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
2020-04-29 10:25:42,610 - werkzeug - INFO -  * Restarting with stat
2020-04-29 10:25:45,398 - __main__ - INFO - >>>>> Starting development server at http://localhost:8888/ <<<<<
2020-04-29 10:25:45,426 - werkzeug - WARNING -  * Debugger is active!
2020-04-29 10:25:45,458 - werkzeug - INFO -  * Debugger PIN: 258-749-652
2020-04-29 10:25:45,530 - werkzeug - INFO -  * Running on http://localhost:8888/ (Press CTRL+C to quit)

flask run
命令通过从
app.py
模块导入
app
对象来工作

因此,在这种情况下,不会执行此函数中的内容:

def main():
    initialize_app(app)
    log.info('>>>>> Starting development server at http://{}/ <<<<<'.format(app.config['SERVER_NAME']))
    app.run(debug=default.FLASK_DEBUG)
我不确定在您使用
python
的情况下它是如何完全运行的,因为
configure\u-app
initialize\u-app
函数都不会返回app对象。但是,您可能希望将代码更改为:

# ...

def configure_app(flask_app):
    # ...
    return flask_app

def initialize_app(flask_app):
    # ...
    return flask_app

app = initialize_app(app)
现在(完全配置)
app
对象可用于运行
flask
。您不需要设置
FLASK_ENV
环境变量,因为默认情况下它会查找名为
app
的对象

如果您仍然希望能够与解释器一起运行,那么将此块添加到末尾,尽管如果使用
flask
命令,这有点无效

if __name__ == "__main__":
    log.info('>>>>> Starting development server at http://{}/ <<<<<'.format(app.config['SERVER_NAME']))
    app.run(debug=default.FLASK_DEBUG)
如果名称=“\uuuuu main\uuuuuuuu”:
log.info('>>>正在http://{}上启动开发服务器/
if __name__ == "__main__":
    main()
# ...

def configure_app(flask_app):
    # ...
    return flask_app

def initialize_app(flask_app):
    # ...
    return flask_app

app = initialize_app(app)
if __name__ == "__main__":
    log.info('>>>>> Starting development server at http://{}/ <<<<<'.format(app.config['SERVER_NAME']))
    app.run(debug=default.FLASK_DEBUG)