我有一个运行良好的 flask
应用程序,我之前也运行过迁移,因为我有一个 migrations
文件夹。但是,运行命令 flask db init
、flask db migrate
或 flask db upgrade
都会给我同样的错误 Error: Could not import "app".
我的项目中没有任何包含 from app import app
的行。
我还在我的环境中设置了 FLASK_APP=app.py
。
app.py
from datetime import timedelta
from typing import Any
from config import config
from extensions import db
from flask import Flask, session
from flask_admin import Admin # type: ignore
from flask_migrate import Migrate # type: ignore
def create_app() -> Flask:
class ReverseProxied(object):
def __init__(self, app: Flask) -> None:
self.app = app
def __call__(self, environ: Any, start_response: Any) -> Any:
scheme = environ.get('HTTP_X_FORWARDED_PROTO')
if scheme:
environ['wsgi.url_scheme'] = scheme
return self.app(environ, start_response)
app = Flask(__name__)
app.wsgi_app = ReverseProxied(app.wsgi_app) # type: ignore
config_name = app.config['ENV'] if app.config['ENV'] else 'config.DevelopmentConfig'
app.config.from_object(config[config_name])
config[config_name].init_app(app)
app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'
@app.before_request
def before_request() -> None:
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=60)
register_extensions(app)
register_blueprints(app)
add_model_views(app)
add_error_handlers(app)
return app
def register_extensions(app: Flask) -> None:
db.init_app(app)
Migrate(app, db)
def register_blueprints(app: Flask) -> None:
from bp1.views import bp1
from bp2.views import bp2
app.register_blueprint(bp1)
app.register_blueprint(bp2)
def add_model_views(app: Flask) -> None:
import model_views
import models
admin.add_view(model_views.BP1View(models.BP1, db.session))
admin.add_view(model_views.BP2View(models.BP2, db.session))
if __name__ == '__main__':
app = create_app()
app.run(host='0.0.0.0')
extensions.py
from flask_sqlalchemy import SQLAlchemy # type: ignore
db = SQLAlchemy()