我要发布包括以下内容的Flask软件包:
class Model(DB.Model):
__abstract__ = True
id = DB.Column(DB.Integer, primary_key=True)
created_at = DB.Column(DB.DateTime, default=datetime.utcnow, nullable=False)
updated_at = DB.Column(DB.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
def __init__(self, **kwargs):
DB.Model.__init__(self, **kwargs)
@classmethod
def create(cls, **kwargs):
instance = cls(**kwargs)
return instance.save()
@classmethod
def delete_all(cls, **kwargs):
all_objs = cls.query.all()
for obj in all_objs:
obj.delete()
但用户将拥有自己的DB
商品。我已经在烧瓶中看到了您可以执行类似操作this_package.init_app(myapp)
或类似操作,这很好。
但是这些库的作者是如何构建它们的包的,以便您可以在应用程序上注册(或db
在我的情况下)并且可以正常工作?
到目前为止,假设数据库对象仍将导入到其模型文件中,我使用了带数据库的吸气剂。它不是完美的,但应该可以工作:
def get_model(DB):
class Model(DB.Model):
__abstract__ = True
id = DB.Column(DB.Integer, primary_key=True)
created_at = DB.Column(DB.DateTime, default=datetime.utcnow, nullable=False)
updated_at = DB.Column(DB.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
def __init__(self, **kwargs):
DB.Model.__init__(self, **kwargs)
@classmethod
def create(cls, **kwargs):
instance = cls(**kwargs)
return instance.save()
@classmethod
def delete_all(cls):
all_objs = cls.query.all()
for obj in all_objs:
obj.delete()
@classmethod
def all(cls):
return cls.query.all()
@classmethod
def newest(cls, field_name):
return cls.query.order_by('{field_name} desc'.format(field_name=field_name)).limit(1)
@classmethod
def oldest(cls, field_name):
return cls.query.order_by('{field_name} asc'.format(field_name=field_name)).limit(1)
def update(self, commit=True, **kwargs):
for attr, value in kwargs.iteritems():
setattr(self, attr, value)
return commit and self.save() or self
def save(self, commit=True):
DB.session.add(self)
if commit:
DB.session.commit()
return self
def delete(self, commit=True):
DB.session.delete(self)
return commit and DB.session.commit()
return Model
然后
from myapp.extensions import DB
from flask_easy_model import get_model
MyModel = get_model(DB)
我阅读了代码,到目前为止flask-cache
,它们init_app()
已经超出了我的脑海。我会很感激任何答案
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句