2016-04-27 45 views
0

私はこのようなアプリを持っている:使用デシベル() - フラスコ

のMyApp /アプリ/ 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の/アプリ/ 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 

私が構造化しようとしたプロジェクトでは、with application.app_context()Modelヘルパークラスに必要としませんでした。私のセットアップとその重要な違いは見当たらず、with application.app_context()に関連するものは何もありませんdb私はいつもapplication not registered on dbというエラーが出ます。 app/models.pydatabase.pyに表示されているものがapp/__init__.pyにあるときは、with application.app_context()を必要とせずに作業しました。dbfrom myapp.app import dbのようにそのままインポートしてそのまま動作させました。 application not registered on dbの苦情を解決するにはどうすればよいですか?app_contextを必要とせずに簡単にdbを使用できますが、すべてがinitに詰まっていない適切なディレクトリ構造を維持しますか?ありがとうございます

答えて

0

Flask-Scriptあなたにはshellがあります。

Flask-Scriptなしで実行する場合は、アプリケーションコンテキストを設定する必要があります。通常のPythonシェルは、コンテキストの設定方法を知らない。

Flask-Scriptシェルを模倣するのは簡単です。

shell.pyファイルを作成します。python -i

from app import application 
ctx = application.app_context() 
ctx.push() 

実行して、すでに定義されたアプリのコンテキストでdbを使用します。

$ python -i shell.py 
>>> from app import db 
>>> db.create_all()