Shishou Engineering Blog

Aim for Full Stack Engineer.

Architecture[Model]

※この記事は書きかけです。またKokemomoは開発中のため、内容が変わることがあります。

 

モデルはアプリケーションのデータや関数などを保有します。

独自のアダプタークラスを経由して、RDBなどにアクセスできるように処理をラッピングしています。

  

■RDB用アダプター

kokemomo.plugins.engine.model.km_storage.impl.km_rdb_adapter.py

 

RDB用のORMとして内部でSQLAlchemyを使用しています。

km_rdb_adapterのBaseModelにモデル定義の基本機能とCRUD処理を実装しています。

 

例えば下記のような実装が可能です。

from kokemomo.plugins.engine.utils.km_model_utils import *
from kokemomo.plugins.engine.model.km_storage.impl.km_rdb_adapter import adapter
from kokemomo.plugins.engine.model.km_validate_error import KMValidateError

class KMBlogInfo(adapter.Model):
    __tablename__ = 'km_blog_info'
    id = adapter.Column(adapter.Integer, autoincrement=True, primary_key=True)
    name = adapter.Column(adapter.Text)
    url = adapter.Column(adapter.Text)
    description = adapter.Column(adapter.Text)

    def __init__(self, data=None):
        if data is None:
            self.name = ''
            self.url = ''
            self.description = ''
        else:
            self.set_data(data)

    def __repr__(self):
        return create_repr_str(self)

    def get_json(self):
        return create_json(self)


    def set_data(self, data):
        self.error = None
        self.name = data.get_request_parameter('name', default='')
        self.url = data.get_request_parameter('url', default='')
        self.description = data.get_request_parameter('description', default='')

    def validate(self):
        self.error = KMValidateError()
        if self.name == '':
            self.error.add_data(id='name', message='ブログ名は必須です。')
        if self.url == '':
            self.error.add_data(id='url', message='URLは必須です。')
        if self.error.size() == 0:
            return True
        else:
            return False


# データを全件取得
info_list = KMBlogInfo.all()

# データのidを指定して取得
info = KMBlogInfo.get(1)

 

 

 

2018-02-21 00:22:24


About
@hiroki8080

京都在住のフリーランスエンジニアです。

ITやIoT, 自作のCMS開発に関することを書いていきます。


主なスキル

Python, Java, C#

AWS, Unity

アプリケーション、フレームワーク、

ライブラリの設計、開発

お仕事のご依頼について

お仕事のご相談・ご依頼などありましたら、

お気軽にお問い合わせください。

e-mail:hiroki-m@gaia.eonet.ne.jp