我正在使用flask和SQLAlchemy,因此,例如,我有一个User类:
class User(UserMixin, Base):
__tablename__ = 'user'
id = Column(Integer, nullable=False, autoincrement=True, primary_key=True)
email = Column(String(100), nullable=False, unique=True)
password = Column(String(100))
name = Column(String(100))
现在在我每次进行查询以按ID或名称获取用户的查询时,在我的视图中都是如此。因此我想创建一个名为userService的类并将所有查询放入其中。这样我就可以了:>
class UserService():
def getUserByName(self, name):
return User.query.filter(User.name == name).first()
def getUserById(self, id):
return User.query.get(id)
def getUserByEmail(self, email):
return User.query.filter(User.email == email).first()
现在在我的视图中,我每次需要用户时都可以调用UserService类。我使用应用程序工厂,所以我的问题是:在我的create_app函数中实例化UserService对象然后将其导入我的视图中,效率更高吗? .py文件,还是在我的views.py文件的每条路径中实例化一个新的UserService对象?
答案 0 :(得分:1)
似乎您只需要UserService
类用于名称空间,因此您无需创建实例。您可以将方法更改为静态方法,也可以创建包含以下功能的模块:
# userservice.py
class UserService():
@staticmethod
def getUserByName(name):
return User.query.filter(User.name == name).first()
# userservice.py
def getUserByName(name):
return User.query.filter(User.name == name).first()
...
我更喜欢第二种方法,它更干净,更Python化:
# views.py
import userservice
user = userservice.getUserByName(name)
# first approach
from userservice import UserService
user = UserService.getUserByName(name)