class Blog(db.Model): owner = db.UserProperty() author = db.StringProperty(default='admin') rpcuser = db.StringProperty(default='admin') rpcpassword = db.StringProperty(default='') description = db.TextProperty() #baseurl = db.StringProperty(multiline=False, default=None) #urlpath = db.StringProperty(multiline=False) title = db.StringProperty(multiline=False, default='Micolog') subtitle = db.StringProperty(multiline=False, default='This is a micro blog.') entrycount = db.IntegerProperty(default=0) posts_per_page = db.IntegerProperty(default=10) feedurl = db.StringProperty(multiline=False, default='/feed') #blogversion = db.StringProperty(multiline=False, default='0.30') theme_name = db.StringProperty(multiline=False, default='default') enable_memcache = db.BooleanProperty(default=False) link_format = db.StringProperty(multiline=False, default='%(year)s/%(month)s/%(day)s/%(post_id)s.html') comment_notify_mail = db.BooleanProperty(default=True) #评论顺序 comments_order = db.IntegerProperty(default=0) #每页评论数 comments_per_page = db.IntegerProperty(default=20) #comment check type 0-No 1-算术 2-验证码 3-客户端计算 comment_check_type = db.IntegerProperty(default=1) #0 default 1 identicon avatar_style = db.IntegerProperty(default=0) blognotice = db.TextProperty(default='') domain = db.StringProperty() show_excerpt = db.BooleanProperty(default=True) version = 1.0 timedelta = db.FloatProperty(default=8.0)# hours language = db.StringProperty(default="en-us") sitemap_entries = db.IntegerProperty(default=30) sitemap_include_category = db.BooleanProperty(default=False) sitemap_include_tag = db.BooleanProperty(default=False) sitemap_ping = db.BooleanProperty(default=False) default_link_format = db.StringProperty(multiline=False, default='post/%(post_id)s') #todo #default_theme = Theme("default") #remove it #allow_pingback = db.BooleanProperty(default=False) #allow_trackback = db.BooleanProperty(default=False) @property def theme (self): return self.get_theme() langs = None application = None @classmethod def getBlog(cls,keyname='default'): blog=memcache.get("gblog") if not blog: blog=Blog.get_by_key_name(keyname) if not blog: blog=Blog(key_name = keyname) blog.InitBlogData() memcache.set("gblog",blog) return blog @property def vkey(self): return str(self.key.id) @property def baseurl(self): return "http://"+self.domain def InitBlogData(self): OptionSet.setValue('PluginActive',[u'googleAnalytics', u'wordpress', u'sys_plugin']) self.domain=os.environ['HTTP_HOST'] self.feedurl=self.baseurl+"/feed" os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' self.admin_essential = False if os.environ.has_key('HTTP_ACCEPT_LANGUAGE'): lang=os.environ['HTTP_ACCEPT_LANGUAGE'].split(',')[0] from django.utils.translation import activate,to_locale self.language=to_locale(lang) self.admin_essential=False #from django.conf import settings #settings._target = None #activate(self.language) self.put() entry=Entry(title="Hello world!".decode('utf8')) entry.content='<p>Welcome to micolog %s. This is your first post. Edit or delete it, then start blogging!</p>'%self.version entry.published=True entry.put() link=Link(href='http://xuming.net',linktext="Xuming's blog".decode('utf8')) link.put() link=Link(href='http://eric.cloud-mes.com/',linktext="Eric Guo's blog".decode('utf8')) link.put() def __init__(self, parent=None, key_name=None, _app=None, _from_entity=False, **kwds): from plugin import Plugins self.plugins = Plugins(self) db.Model.__init__(self, parent, key_name, _app, _from_entity, **kwds) def tigger_filter(self, name, content, *arg1, **arg2): return self.plugins.tigger_filter(name, content, blog=self, *arg1, **arg2) def tigger_action(self, name, *arg1, **arg2): return self.plugins.tigger_action(name, blog=self, *arg1, **arg2) def tigger_urlmap(self, url, *arg1, **arg2): return self.plugins.tigger_urlmap(url, blog=self, *arg1, **arg2) def get_ziplist(self): return self.plugins.get_ziplist(); def save(self): self.put() def initialsetup(self): self.title = 'Your Blog Title' self.subtitle = 'Your Blog Subtitle' def get_theme(self): return Theme(self.theme_name); def get_langs(self): self.langs = LangIterator() return self.langs def cur_language(self): return self.get_langs().getlang(self.language) def rootpath(self): return os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) @vcache("blog.hotposts",args=("count")) def hotposts(self,count=8): return Entry.all().filter('entrytype =', 'post').filter("published =", True).order('-readtimes').fetch(count) @vcache("blog.recentposts",args=("count")) def recentposts(self,count=8): return Entry.all().filter('entrytype =', 'post').filter("published =", True).order('-date').fetch(count) @vcache("blog.postscount") def postscount(self): return Entry.all().filter('entrytype =', 'post').filter("published =", True).order('-date').count() @vcache("blog.sticky_entries") def sticky_entries(self): return Entry.all().filter('entrytype =','post')\ .filter('published =',True)\ .filter('sticky =',True)\ .order('-date') @vcache("blog.get_entries_paged",args=("entrytype","published","pindex","size")) def get_entries_paged(self,entrytype='post',published=True,pindex=1,size=20): return Entry.all().filter('entrytype =',entrytype).\ filter("published =", published).order('-sticky').order('-date').\ fetch(size, offset = (pindex-1) * size) @vcache("blog.get_blogrolls") def blogrolls(self): return Link.all().filter('linktype =','blogroll') @vcache("blog.get_archives") def archives(self): return Archive.all().order('-year').order('-month').fetch(12) @vcache("blog.get_alltags") def tags(self): return Tag.all() @vcache("blog.recent_comments",args=("count")) def recent_comments(self,count=5): return Comment.all().order('-date').fetch(count) @vcache("blog.get_categories") def categories(self): return Category.all()