我一直在尝试从使用sqlite转到针对项目的sqlalchemy。这导致我移动了许多文件,并且似乎破坏了我的应用程序路由,我无法解释如何做。有关代码和文件结构,请参见下文。简而言之,我现在可以返回并工作的唯一途径是我构建的Swagger UI,这可能仅能起作用,因为Flask无法处理我所知的途径。任何帮助将非常感激。请记住,我是不熟悉Flask的,所以如果这是一个非常愚蠢的问题,请原谅我,关于stackoverflow的其他答案最终导致我创建了create_app函数,尽管确实使flask网站运行了,但我认为@ app.route并不是都被叫。
我的文件结构如下:
Project
|--- project.py (Runs the project)
|--- Config.py (Holds the class config)
|--- web
| |--- __init__.py (See below)
| |--- routes.py (Hols the routes)
| |--- api (Swagger ui and other scripts)
| | |--- __init__.py
| | |--- swagger.yaml
我的project.py:
from web import create_app
import db
import os
app = create_app()
if __name__ == "__main__":
app.run()
else:
if not os.path.exists("./Project.db"):
print(" * Building Database")
db.build_db()
print(" * Database built")
print(" * Database exists")
我的网站/ 初始化 .py:
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config
import connexion
db = SQLAlchemy()
def create_app():
app = connexion.FlaskApp(__name__, specification_dir="./api")
app.add_api("swagger.yaml")
app = app.app
app.config.from_object(Config)
db.init_app(app)
return app
#migrate = Migrate(app, db)
from web import routes, models
我的web / routes.py :(为简洁起见,已剪短)
#! python3
from web import create_app, routes
from web.forms import LoginForm
import web.api
import flask
app = create_app()
#############
# Home URLs #
#############
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
return flask.redirect(flask.url_for('home'))
return flask.render_template('login.html', title='Sign In', form=form)
@app.route("/web")
def home():
devices = web.api.devices.get()
for device in devices:
device.update({"model": web.api.models.get_devices_model(device["alias"])["model"]})
return flask.render_template("home.html", devices=devices)