class Widget(db.Document): title = db.StringField(default='widget') md_content = db.StringField() html_content = db.StringField() allow_post_types = db.ListField(db.StringField()) priority = db.IntField(default=1000000) update_time = db.DateTimeField() def save(self, *args, **kwargs): if self.md_content: self.html_content = markdown2.markdown( self.md_content, extras=['code-friendly', 'fenced-code-blocks', 'tables']) self.html_content = get_clean_html_content(self.html_content) if not self.update_time: self.update_time = datetime.datetime.utcnow() return super(Widget, self).save(*args, **kwargs) def __unicode__(self): return self.title meta = { # 'allow_inheritance': True, 'ordering': ['priority'] }
class Draft(db.Document): title = db.StringField(max_length=255, default='new blog', required=True) slug = db.StringField(max_length=255, required=True, unique=True) # fix_slug = db.StringField(max_length=255, required=False) abstract = db.StringField() raw = db.StringField(required=True) pub_time = db.DateTimeField() update_time = db.DateTimeField() content_html = db.StringField(required=True) author = db.ReferenceField(User) category = db.StringField(max_length=64, default='default') tags = db.ListField(db.StringField(max_length=30)) is_draft = db.BooleanField(default=True) post_type = db.StringField(max_length=64, default='post') weight = db.IntField(default=10) def save(self, *args, **kwargs): now = datetime.datetime.utcnow() if not self.pub_time: self.pub_time = now self.update_time = now self.content_html = markdown2.markdown( self.raw, extras=['code-friendly', 'fenced-code-blocks', 'tables']) self.content_html = get_clean_html_content(self.content_html) return super(Draft, self).save(*args, **kwargs) def __unicode__(self): return self.title meta = { 'allow_inheritance': True, 'indexes': ['slug'], 'ordering': ['-update_time'] }
class Post(db.Document): title = db.StringField(max_length=255, default='new blog', required=True) slug = db.StringField(max_length=255, required=True, unique=True) fix_slug = db.StringField(max_length=255, required=False) abstract = db.StringField() raw = db.StringField(required=True) pub_time = db.DateTimeField() update_time = db.DateTimeField() content_html = db.StringField(required=True) author = db.ReferenceField(User) category = db.StringField(max_length=64) tags = db.ListField(db.StringField(max_length=30)) is_draft = db.BooleanField(default=False) post_type = db.StringField(max_length=64, default='post') weight = db.IntField(default=10) def get_absolute_url(self): # return url_for('main.post_detail', slug=self.slug) router = { 'post': url_for('main.post_detail', slug=self.slug, _external=True), 'page': url_for('main.page_detail', slug=self.slug, _external=True), 'wechat': url_for('main.wechat_detail', slug=self.slug, _external=True), } return router[self.post_type] def save(self, allow_set_time=False, *args, **kwargs): if not allow_set_time: now = datetime.datetime.utcnow() if not self.pub_time: self.pub_time = now self.update_time = now # self.content_html = self.raw self.content_html = markdown2.markdown( self.raw, extras=['code-friendly', 'fenced-code-blocks', 'tables']) self.content_html = get_clean_html_content(self.content_html) return super(Post, self).save(*args, **kwargs) def set_post_date(self, pub_time, update_time): self.pub_time = pub_time self.update_time = update_time return self.save(allow_set_time=True) def to_dict(self): post_dict = {} post_dict['title'] = self.title post_dict['slug'] = self.slug post_dict['abstract'] = self.abstract post_dict['raw'] = self.raw post_dict['pub_time'] = self.pub_time.strftime('%Y-%m-%d %H:%M:%S') post_dict['update_time'] = self.update_time.strftime( '%Y-%m-%d %H:%M:%S') post_dict['content_html'] = self.content_html post_dict['author'] = self.author.username post_dict['category'] = self.category post_dict['tags'] = self.tags post_dict['post_type'] = self.post_type return post_dict def __unicode__(self): return self.title meta = { 'allow_inheritance': True, 'indexes': ['slug'], 'ordering': ['-pub_time'] }
class PostStatistics(db.Document): post = db.ReferenceField(Post) visit_count = db.IntField(default=0) verbose_count_base = db.IntField(default=0)