У меня есть фляжное приложение со следующей структурой каталогов:
- myapp/
- application.py
__init__.py
- models/
__init__.py
- user.py
Модели используют Flask-SQLAlchemy, поэтому им необходимо иметь доступ к объекту db
(экземпляру SQLAlchemy) из application.py
.
пользователь.py:
import sys,os
sys.path.append('/path/to/application/package')
from testapp import db
class User(db.Model):
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(255),unique=True)
age = db.Column(db.Integer)
def __init__(self,username,age):
self.username = username
self.age = age
def __repr__(self):
return '<User %r>' % self.username
Поскольку любой из моделей требуется доступ к экземпляру SQLAlchemy приложения, свойству db
, мне приходится кидать весь этот пакет по пути, а затем импортировать из основного модуля приложения. Ради здравомыслия я хотел бы хранить модели в отдельных файлах. Нужно ли будет помещать код пути поверх каждой модели? Есть ли способ лучше? Я бы предпочел не вводить полный путь таким образом, поскольку они могут быть развернуты на разных хостах с разными структурами каталогов. В идеале должен быть какой-то способ внутренней обработки пути, поэтому, когда он используется в качестве другого пользователя через mod_wsgi
, мне не нужно вручную изменять код.