Ich habe eine App wie folgt aus:Verwendung db ohne dass app.app_context() - Flask
myapp/app/init Py:
import sqlite3
from contextlib import closing
from flask import Flask, g
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
# from app.models import db
from database import db
application = Flask(__name__)
application.config.from_object('config')
application.debug = True
db.init_app(application)
login_manager = LoginManager()
login_manager.init_app(application)
from app import views
myapp/database.py:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
myapp/app/models.py:
from database import db
from app import application
class CRUDMixin(object):
...
def delete(self, commit=True):
"""Remove the record from the database."""
with application.app_context():
db.session.delete(self)
return commit and db.session.commit()
class Model(CRUDMixin, db.Model):
"""Base model class that includes CRUD convenience methods."""
__abstract__ = True
def __init__(self, **kwargs):
db.Model.__init__(self, **kwargs)
class User(Model):
"""
:param str email: email address of user
:param str password: encrypted password for the user
"""
__tablename__ = 'users'
email = db.Column(db.String, primary_key=True)
password = db.Column(db.String)
authenticated = db.Column(db.Boolean, default=False)
def is_active(self):
"""True, as all users are active."""
return True
def get_id(self):
"""Return the email address to satisfy Flask-Login's requirements."""
return self.email
def is_authenticated(self):
"""Return True if the user is authenticated."""
return self.authenticated
def is_anonymous(self):
"""False, as anonymous users aren't supported."""
return False
Das Projekt, das ich versuchte zu strukturieren, benötigte with application.app_context()
in der Model
Helferklasse nicht. Ich kann keine signifikanten Unterschiede zwischen meinem Setup und seiner sehen, und doch ohne with application.app_context()
alles über alles im Zusammenhang mit db
Ich bekomme die üblichen application not registered on db
Fehler. Wenn alles in app/models.py
und database.py
in app/__init__.py
war, funktionierte es ohne Notwendigkeit with application.app_context()
und ich konnte db
roh in der Schale wie from myapp.app import db
importieren und es funktionierte wie es ist. Was kann ich tun, um die application not registered on db
Beschwerde zu beruhigen, aber db
einfach ohne app_context
verwenden zu können, aber immer noch eine ordnungsgemäße Verzeichnisstruktur, in der alles nicht in init
gestaut ist? Danke