Определите модели в отдельном файле при использовании заводской колбы приложения - PullRequest
0 голосов
/ 01 мая 2018

Я создаю приложение для колб, в котором я использую метод фабрики приложений. У меня есть файл в папке приложения __init__.py, который имеет функцию create_app со следующим кодом

def create_app(test_config=None):
app = Flask(__name__,instance_relative_config=True)
app.config.from_mapping(
        SECRET_KEY='dev',
    )

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@localhost/database'
db = SQLAlchemy(app)

if test_config == None:
    app.config.from_pyfile('config.py',silent=True)
else:
    app.config.form_mapping(test_config)

from flaskr import models

try:
    os.makedirs(app.instance_path)
except OSError:
    pass

class User(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    uname = db.Column(db.String(50))

@app.route('/hello')
def hello():
    return json.dumps({'message':'hello','status':True})
@app.route('/getusers')
def getusers():
    u = User.query.get(1)
    return json.dumps({'uname':u.uname})

return app

То, что я хочу, - это определить модели в отдельном файле. Как я могу это сделать? Я попытался определить в отдельном файле и импортировать его. Но проблема в том, что модель наследует db.Model, который затем недоступен в импортированном файле.

1 Ответ

0 голосов
/ 01 мая 2018

Оставьте создание объекта db за пределами create_app, не передавая экземпляр app, и используйте метод SQLAlchemy.init_app для настройки и инициализации. ваш db объект, таким образом вы можете import его из любого файла:

db = SQLAlchemy()
#...
def create_app(test_config=None):
    app = Flask(__name__,instance_relative_config=True)
    #...
    db.init_app(app)

Больше на эту тему можно найти в документации на колбу

...