使用时如何构造Flask库以在应用程序或数据库上注册?

codyc4321

我要发布包括以下内容的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在我的情况下)并且可以正常工作?

codyc4321

到目前为止,假设数据库对象仍将导入到其模型文件中,我使用了带数据库的吸气剂。它不是完美的,但应该可以工作:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何正确使用SQL LIKE语句从Flask应用程序查询数据库

使用 SQLAlcehmy 的 Flask 应用程序:如何检测提交到数据库的外部更改?

如何在Flask Web应用程序中使用现有的PostGIS数据库

如何配置 SQLite 数据库以在 Flask 应用程序中使用

如何使用Android应用程序运送数据库

Android应用程序离线使用时,Firebase实时数据库崩溃

如何使用javascript和反应组件从flask应用程序中的数据库打印数据?

如何使用 python Flask 应用程序将文本从输入字段发送到 MySQL 数据库

如何在全新的应用程序部署中将数据库与Flask-Migrate同步?

如何围绕现有数据库构建Flask应用程序?

如何将 id 从 Flask 应用程序传递到 mysql 数据库

如何使用SQL必需的库发布数据库Winform应用程序

覆盖应用程序并删除Android上的数据库

如何设置我的 Web 应用程序数据库以在另一台机器上使用 postgres 数据库?

如何从 Docker 上的 Spring 应用程序访问 docker 上的 MySQL 数据库?

当数据在应用程序外的数据库上更改时,如何刷新React Redux应用程序

如何从MYSQL数据库中获取数据并将其显示在应用程序上?

如何使用IP白名单将Heroku上的应用程序连接到Atlas中的数据库?

如何从android应用程序导出数据库?使用 ADB run-as 清空数据库结果

如何在Bluemix中将PHP应用程序转换为使用SQL数据库而不是mySQL数据库?

如何从应用程序中删除数据库?

如何开发基于数据库方案的应用程序?

如何在应用程序中嵌入数据库?

如何从Android应用程序读写数据库

如何为Android应用程序选择数据库?

如何在“调试” Firebase数据库上运行调试应用程序版本

在Heroku上,如何安排Postgres数据库以使我的Rails应用程序定期重置?

Modulus上的Meteor应用程序-如何重置数据库

如何在AWS Elastic Beanstalk上为Rails应用程序播种数据库