class Message(db.Document): """ 消息回复 """ TYPE_ARTICLE = "article" TYPE_TEXT = "text" TYPE_MUSIC = "music" TYPE_CHOICES = ( (TYPE_ARTICLE, '文章'), (TYPE_TEXT, '文本'), (TYPE_MUSIC, '音乐'), ) keyword = db.XListField(db.StringField(), verbose_name='关键字') type = db.StringField(default=TYPE_TEXT, verbose_name='类型', choices=TYPE_CHOICES) content = db.StringField(verbose_name='文本回复') music = db.EmbeddedDocumentField((MusicItem), verbose_name='音乐') article = db.XListField(db.EmbeddedDocumentField(ArticleItem), verbose_name='文章') default = db.BooleanField(default=False, verbose_name='默认回复') follow = db.BooleanField(default=False, verbose_name='关注回复') enable = db.StringField(default=Enable.ENABLED, verbose_name='状态', choices=Enable.CHOICES) created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = dict(indexes=[ 'default', 'keyword', ]) def reply(self, message, **kwargs): if self.type == 'text': return TextReply( message=message, content=self.content if self.content else '欢迎关注花胶!') elif self.type == 'music': if self.music.url: return MusicReply(message=message, title=self.music.music_title, description=self.music.music_description, url=self.music.url.link, hq_url=self.music.hq_url.link) elif self.type == 'article': reply = ArticlesReply(message=message) if self.article: for art in self.article: article = Article( title=art.title, description=art.description, img=art.img.get_link(), url=art.url, ) reply.add_article(article) return reply return ''
class WXMenu(db.Document): """ 微信菜单 """ name = db.StringField(verbose_name='主菜单') second = db.ListField(db.EmbeddedDocumentField(Second), verbose_name='二级菜单') url = db.StringField(verbose_name='链接') sort = db.IntField(verbose_name='排序') make = db.BooleanField(verbose_name='使用', default=False) created = db.DateTimeField(verbose_name='创建时间', default=datetime.now)
class Choices(db.Document): """ 选项模型 """ MENU_ICON = 'plus-circle' fields = dict() key = db.StringField(verbose_name='键名') name = db.StringField(verbose_name='名称') default = db.StringField(verbose_name='默认值') choices = db.XListField(db.EmbeddedDocumentField(Choice), verbose_name='选项') enable = db.BooleanField(default=True, verbose_name='启用') modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = dict(indexes=['key']) def __unicode__(self): return '%s - %s' % (self.key, self.name) @staticmethod def init(): for key, field in Choices.fields.iteritems(): Choices.init_field(key, field[1], field[0]) @staticmethod def init_field(key, name, field, choices=None): choices = choices or Choices.objects(key=key).first() if choices: if choices.enable: if choices.default: field.default = choices.default field.choices = [(x.key, x.name) for x in choices.choices] else: field.default = None field.choices = None else: Choices(key=key, name=name).save() Choices.refresh(field.owner_document) @staticmethod def refresh(model): if model: for admin in current_app.extensions.get('admin', []): for view in admin._views: if model == getattr(view, 'model', None): view._refresh_cache() def save(self): super(Choices, self).save() field = self.fields.get(self.key) if field: self.init_field(self.key, field[1], field[0], self)
class Action(db.Document): """ 功能模型 """ MENU_ICON = 'bars' key = db.StringField(verbose_name='ID') name = db.StringField(verbose_name='名称') desc = db.StringField(verbose_name='描述') icon = db.Base64ImageField(verbose_name='图标') active_icon = db.Base64ImageField(verbose_name='激活图标') module = choice(db.StringField(verbose_name='模块'), 'action_module', '功能模块') data = db.StringField(verbose_name='数据') target = db.StringField(verbose_name='目标') share = db.EmbeddedDocumentField(Share, verbose_name='分享') sort = db.IntField(verbose_name='排序') android_start = db.ReferenceField(AndroidVersion, verbose_name='安卓版本') android_end = db.ReferenceField(AndroidVersion, verbose_name='安卓最大版本') ios_start = db.ReferenceField(IOSVersion, verbose_name='IOS版本') ios_end = db.ReferenceField(IOSVersion, verbose_name='IOS最大版本') login = db.BooleanField(default=False, verbose_name='登陆') login_show = db.BooleanField(default=False, verbose_name='显示') debug = db.BooleanField(default=False, verbose_name='调试') enable = db.StringField(default=Enable.ENABLED, verbose_name='状态', choices=Enable.CHOICES) modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = { 'indexes': [ 'key', 'sort', '-created', ] } @property def detail(self): return dict( id=self.key, name=self.name, desc=self.desc, icon=self.icon.base64, active_icon=self.active_icon.base64, data=self.data, target=self.target, share=unicode(self.share), login=self.login, login_show=self.login_show, debug=self.debug, )
class ActionItem(db.Document): """ 功能模型 """ MENU_ICON = 'bars' name = db.StringField(verbose_name='名称') key = db.StringField(verbose_name='键名') desc = db.StringField(verbose_name='描述') icon = db.XImageField(verbose_name='图标') module = db.ReferenceField('ActionModule', verbose_name='模块') action = db.StringField(default=Action.DEFAULT, verbose_name='动作', choices=Action.CHOICES) url = db.StringField(verbose_name='链接') share = db.EmbeddedDocumentField(ShareItem, verbose_name='分享') sort = db.IntField(verbose_name='排序') android_version = db.ReferenceField(AndroidVersion, verbose_name='安卓版本') android_version_end = db.ReferenceField(AndroidVersion, verbose_name='安卓最大版本') ios_version = db.ReferenceField(IOSVersion, verbose_name='IOS版本') ios_version_end = db.ReferenceField(IOSVersion, verbose_name='IOS最大版本') login = db.BooleanField(default=False, verbose_name='登陆') login_show = db.BooleanField(default=False, verbose_name='登录显示') enable = db.StringField(default=Enable.ENABLED, verbose_name='状态', choices=Enable.CHOICES) modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = { 'indexes': [ 'key', 'sort', '-created', ] } @property def detail(self): return dict( name=self.name, key=self.key, desc=self.desc, icon=self.icon.link, action=self.action, login=self.login, url=self.url, share=unicode(self.share), extras='', )
class Model(db.Document): """ 建模 """ MENU_ICON = 'database' name = db.StringField(max_length=100, verbose_name='名称') desc = db.StringField(max_length=100, verbose_name='描述') fields = db.XListField(db.EmbeddedDocumentField(Field), verbose_name='字段') modified_field = db.BooleanField(default=True, verbose_name='修改') created_field = db.BooleanField(default=True, verbose_name='创建') modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') def __unicode__(self): return self.name
class ActionItem(db.Document): """ 功能模型 """ DEFAULT = 'default' MODULE_CHOICES = ((DEFAULT, '默认')) MODULE_VALUES = [x[0] for x in MODULE_CHOICES] name = db.StringField(verbose_name='名称') key = db.StringField(verbose_name='键名') icon = db.XImageField(verbose_name='图标') module = db.StringField(default=DEFAULT, verbose_name='模块', choices=MODULE_CHOICES) action = db.StringField(default=Action.DEFAULT, verbose_name='动作', choices=Action.CHOICES) url = db.StringField(verbose_name='链接') share = db.EmbeddedDocumentField(ShareItem, verbose_name='分享') sort = db.IntField(verbose_name='排序') login = db.BooleanField(default=False, verbose_name='登陆') enable = db.StringField(default=Enable.ENABLED, verbose_name='状态', choices=Enable.CHOICES) modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = { 'indexes': [ 'key', 'sort', '-created', ] } @property def detail(self): return dict( name=self.name, key=self.key, icon=self.icon.link, action=self.action, login=self.login, url=self.url, share=unicode(self.share), )
class SlideItem(db.Document): """ 广告模型 """ MODULE_HEAD = 'home_head' MODULE_FOOT = 'home_foot' MODULE_CHOICES = ( (MODULE_HEAD, '头部'), (MODULE_FOOT, '底部'), ) name = db.StringField(verbose_name='名称') image = db.XImageField(verbose_name='图片') module = db.StringField(default=MODULE_HEAD, verbose_name='模块', choices=MODULE_CHOICES) action = db.StringField(default=Action.DEFAULT, verbose_name='动作', choices=Action.CHOICES) url = db.StringField(verbose_name='链接') share = db.EmbeddedDocumentField(ShareItem, verbose_name='分享') sort = db.IntField(verbose_name='排序') enable = db.StringField(default=Enable.ENABLED, verbose_name='状态', choices=Enable.CHOICES) modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = { 'indexes': [ 'sort', '-created', ] } @property def detail(self): return dict( name=self.name, icon=self.image.link, action=self.action, url=self.url, share=unicode(self.share), )
class SlideItem(db.Document): """ 广告模型 """ MENU_ICON = 'paw' name = db.StringField(verbose_name='名称') key = db.StringField(verbose_name='键名') icon = db.XImageField(verbose_name='图标') module = db.ReferenceField('SlideModule', verbose_name='模块') action = db.StringField(default=Action.DEFAULT, verbose_name='动作', choices=Action.CHOICES) url = db.StringField(verbose_name='链接') share = db.EmbeddedDocumentField(ShareItem, verbose_name='分享') sort = db.IntField(verbose_name='排序') login = db.BooleanField(default=False, verbose_name='登陆') enable = db.StringField(default=Enable.ENABLED, verbose_name='状态', choices=Enable.CHOICES) modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = { 'indexes': [ 'key', 'sort', '-created', ] } @property def detail(self): return dict( name=self.name, key=self.key, icon=self.icon.link, action=self.action, login=self.login, url=self.url, share=unicode(self.share), extras='', )
class Slide(db.Document): """ 广告模型 """ MENU_ICON = 'paw' key = db.StringField(verbose_name='ID') name = db.StringField(verbose_name='名称') icon = db.XImageField(verbose_name='图标') module = choice(db.StringField(verbose_name='模块'), 'slide_module', '广告模块') target = db.StringField(verbose_name='目标') share = db.EmbeddedDocumentField(Share, verbose_name='分享') sort = db.IntField(verbose_name='排序') android_start = db.ReferenceField(AndroidVersion, verbose_name='安卓版本') android_end = db.ReferenceField(AndroidVersion, verbose_name='安卓最大版本') ios_start = db.ReferenceField(IOSVersion, verbose_name='IOS版本') ios_end = db.ReferenceField(IOSVersion, verbose_name='IOS最大版本') login = db.BooleanField(default=False, verbose_name='登陆') enable = db.StringField(default=Enable.ENABLED, verbose_name='状态', choices=Enable.CHOICES) modified = db.DateTimeField(default=datetime.now, verbose_name='修改时间') created = db.DateTimeField(default=datetime.now, verbose_name='创建时间') meta = { 'indexes': [ 'key', 'sort', '-created', ] } @property def detail(self): return dict( id=self.key, name=self.name, icon=self.icon.link, action=self.action, login=self.login, url=self.url, share=unicode(self.share), extras='', )