app/init .py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__ name __)
db = SQLAlchemy(app)
from app import views, models
Run Code Online (Sandbox Code Playgroud)
应用程序/ models.py:
from app import db # I want to avoid this everywhere
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢我的子模块依赖于他们的父级.也可以避免全局包变量吗?我想要更多的OO解决方案.
app的一个替代方案是使用我认为的蓝图,但随后我松开了路径装饰器.对于带有SQLAlchemy的db也是如此(或者可以吗?).
我正在尝试扩展基于烧瓶的项目https://github.com/hack4impact/flask-base/tree/master/app.这使用app/init.py和蓝图中的应用程序工厂模式.
在app/init.py我有:
import os
from flask import Flask
from flask_mail import Mail
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_assets import Environment
from flask_wtf import CsrfProtect
from flask_compress import Compress
from flask_rq import RQ
from flask_admin import Admin, BaseView, expose
from flask_admin.contrib.sqla import ModelView
# from app.models import User
from config import config
from .assets import app_css, app_js, vendor_css, vendor_js
basedir = os.path.abspath(os.path.dirname(__file__))
mail = Mail()
db = SQLAlchemy()
csrf = CsrfProtect()
compress = Compress()
# …Run Code Online (Sandbox Code Playgroud) 我是bluprint的新手,并且将db导入mydatabase.py文件是一个模型文件.
我遇到过这个错误:
ImportError:无法导入名称'db'
我项目的树
nikoofar/
run.py
bookshelf/
__init__.py
mydatabase.py
main/
controllers.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
run.py
from bookshelf import app
if __name__ == '__main__':
app.run(debug=True, port=8000)
Run Code Online (Sandbox Code Playgroud)
bookshelf/intit .py
from flask import Flask
from bookshelf.main.controllers import main
from flask_sqlalchemy import SQLAlchemy
from mydatabase import pmenu
app = Flask(__name__, instance_relative_config=True)
db = SQLAlchemy(app)
db.init_app(app)
application.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/databasename'
app.config.from_object('config')
app.register_blueprint(main, url_prefix='/')
Run Code Online (Sandbox Code Playgroud)
bookshelf/main/controllers.py
from flask import Blueprint
from bookshelf.mydatabase import *
from flask_sqlalchemy import SQLAlchemy
main = Blueprint('main', __name__)
@main.route('/')
def index():
g = pmenu.query.all() …Run Code Online (Sandbox Code Playgroud)