def get(self, nodeid): n_obj = Node.get_by_id(int(nodeid)) if not n_obj: self.error(404) self.echo('error.html', { 'page': '404', 'title': "Can't find out this URL", 'h2': 'Oh, my god!', 'msg': 'Something seems to be lost...' }) return from_id = int(self.request.get('id', '0')) if from_id<=0 and n_obj.count: from_id = n_obj.count to_id = from_id - EACH_PAGE_POST_NUM if to_id<0: to_id = 0 newest_node = Node.get_newest() self.echo('nodedetail.html', { 'title': n_obj.name, 'n_obj': n_obj, 'from_id': from_id, 'to_id': to_id, 'topic_objs': Node.get_page_topic(nodeid, from_id, to_id), 'newest_node': newest_node, 'recent_node': Node.get_recent_node(), 'hot_node': Node.get_hot_node(), 'recent_topic_objs': KeyStrValue.get_topic_key_title('recent-topic-home'), 'reply_topic_objs': KeyStrValue.get_topic_key_title('recent-reply-topic'), }, layout='_layout.html') if len(newest_node)==10: KeyStrValue.add_node_key(nodeid)
def get(self, name): name = name.lower() m_obj = Member.get_by_key_name(name) if m_obj: self.echo( 'member.html', { 'title': m_obj.name, 'm_obj': m_obj, 'mi_obj': MemberInfo.get_by_key_name(name), 'newest_node': Node.get_newest(), #'recent_node': Node.get_recent_node(), 'hot_node': Node.get_hot_node(), 'recent_topic_objs': KeyStrValue.get_topic_key_title('recent-topic-home'), 'reply_topic_objs': KeyStrValue.get_topic_key_title('recent-reply-topic'), }, layout='_layout.html') else: self.error(404) self.echo( 'error.html', { 'page': '404', 'title': "Can't find out this URL", 'h2': 'Oh, my god!', 'msg': 'Something seems to be lost...' }) return
def get(self): self.echo('home.html', { 'title': "首页", 'topic_objs': KeyStrValue.get_topic_objs('recent-topic-home'), 'site_counts': Counter.get_site_counts(), 'newest_node': Node.get_newest(), 'recent_node': Node.get_recent_node(), 'hot_node': Node.get_hot_node(), 'reply_topic_objs': KeyStrValue.get_topic_key_title('recent-reply-topic'), }, layout='_layout.html')
def get(self, nodeid, topicid): topic_key = '%s-%s' % (nodeid, topicid) t_obj = Topic.get_by_key_name(topic_key) if not t_obj: self.error(404) self.echo( 'error.html', { 'page': '404', 'title': "Can't find out this URL", 'h2': 'Oh, my god!', 'msg': 'Something seems to be lost...' }) return if t_obj.cnum: from_id = int(self.request.get('id', '1')) if from_id > 1 and from_id % EACH_PAGE_COMMENT_NUM != 1: self.redirect('/t-' + topic_key) return to_id = from_id + EACH_PAGE_COMMENT_NUM - 1 if to_id > t_obj.cnum: to_id = t_obj.cnum c_objs = Comment.get_comments(topic_key, from_id, to_id) else: c_objs = None from_id = to_id = cnum = 0 self.echo( 'topicdetail.html', { 'title': t_obj.title + ' - ' + t_obj.node.name, 'description': 'description', 't_obj': t_obj, 'c_objs': c_objs, 'from_id': from_id, 'to_id': to_id, 'newest_node': Node.get_newest(), #'recent_node': Node.get_recent_node(), 'hot_node': Node.get_hot_node(), 'recent_topic_objs': KeyStrValue.get_topic_key_title('recent-topic-home'), 'reply_topic_objs': KeyStrValue.get_topic_key_title('recent-reply-topic'), }, layout='_layout.html')
def get(self): if self.cur_user: self.echo('notifications.html', { 'title': "站内提醒", 'newest_node': Node.get_newest(), 'recent_node': Node.get_recent_node(), 'hot_node': Node.get_hot_node(), 'recent_topic_objs': KeyStrValue.get_topic_key_title('recent-topic-home'), 'reply_topic_objs': KeyStrValue.get_topic_key_title('recent-reply-topic'), }, layout='_layout.html') else: self.redirect('/')
def get(self): self.header['Content-Type'] = "application/atom+xml" self.echo( 'index.xml', { 'posts': KeyStrValue.get_topic_objs('recent-topic-home')[:FEED_NUM], 'site_updated': int(time()), })
def get(self, nodeid, topicid): topic_key = '%s-%s' % (nodeid, topicid) t_obj = Topic.get_by_key_name(topic_key) if not t_obj: self.error(404) self.echo('error.html', { 'page': '404', 'title': "Can't find out this URL", 'h2': 'Oh, my god!', 'msg': 'Something seems to be lost...' }) return if t_obj.cnum: from_id = int(self.request.get('id', '1')) if from_id>1 and from_id%EACH_PAGE_COMMENT_NUM!=1: self.redirect('/t-'+topic_key) return to_id = from_id + EACH_PAGE_COMMENT_NUM - 1 if to_id > t_obj.cnum: to_id = t_obj.cnum c_objs = Comment.get_comments(topic_key, from_id, to_id) else: c_objs = None from_id = to_id = cnum = 0 self.echo('topicdetail.html', { 'title': t_obj.title + ' - ' + t_obj.node.name, 'description':'description', 't_obj': t_obj, 'c_objs': c_objs, 'from_id': from_id, 'to_id': to_id, 'newest_node': Node.get_newest(), 'recent_node': Node.get_recent_node(), 'hot_node': Node.get_hot_node(), 'recent_topic_objs': KeyStrValue.get_topic_key_title('recent-topic-home'), 'reply_topic_objs': KeyStrValue.get_topic_key_title('recent-reply-topic'), }, layout='_layout.html')
def get(self, name): name = name.lower() m_obj = Member.get_by_key_name(name) if m_obj: self.echo('member.html', { 'title': m_obj.name, 'm_obj': m_obj, 'mi_obj': MemberInfo.get_by_key_name(name), 'newest_node': Node.get_newest(), 'recent_node': Node.get_recent_node(), 'hot_node': Node.get_hot_node(), 'recent_topic_objs': KeyStrValue.get_topic_key_title('recent-topic-home'), 'reply_topic_objs': KeyStrValue.get_topic_key_title('recent-reply-topic'), }, layout='_layout.html') else: self.error(404) self.echo('error.html', { 'page': '404', 'title': "Can't find out this URL", 'h2': 'Oh, my god!', 'msg': 'Something seems to be lost...' }) return
def post(self, nodeid='1'): if self.cur_user and self.cur_user.flag > 1: n_obj = Node.get_by_id(int(nodeid)) if not n_obj: self.error(404) self.write('404: not found') return errors = [] author = self.cur_user.name title = self.POST['title'] content = self.POST['content'] if title and content: if len(title) <= TITLE_MAX_S and len(content) <= CONTENT_MAX_S: int_time = int(time()) #check spam mi_obj = MemberInfo.get_or_insert(author) if self.cur_user.flag < 99: if mi_obj.topict: t_list = mi_obj.topict.split(',') if len(t_list) == MEMBER_RECENT_TOPIC and ( int_time - int(t_list[-1])) < 3600: self.write( u'403:不要发帖太频繁了 <a href="/newpost/%s">请返回</a>' % nodeid) return #check repeat content = textilize(content) #content = safe_encode(content) con_md5 = md5(content.encode('utf-8')).hexdigest() if memcache.get('c_' + con_md5): self.write(u'403:请勿灌水 <a href="/newpost/%s">请返回</a>' % nodeid) return else: memcache.set('c_' + con_md5, '1', 36000) if n_obj.count: topic_id = n_obj.count + 1 else: topic_id = 1 topic_key = '%s-%s' % (nodeid, str(topic_id)) t_obj = Topic(key_name=topic_key) t_obj.title = title t_obj.author = author t_obj.add = int_time t_obj.con = content t_obj.put() if t_obj.is_saved(): #node count +1 n_obj.count += 1 db.run_in_transaction(obj_runput, n_obj) #memberinfo mi_obj.topicn += 1 if mi_obj.topick: t_list = mi_obj.topick.split(',') t_list.insert(0, topic_key) mi_obj.topick = ','.join( t_list[:MEMBER_RECENT_TOPIC]) else: mi_obj.topick = topic_key if mi_obj.topict: t_list = mi_obj.topict.split(',') t_list.insert(0, str(int_time)) mi_obj.topict = ','.join( t_list[:MEMBER_RECENT_TOPIC]) else: mi_obj.topict = str(int_time) db.run_in_transaction(obj_runput, mi_obj, ['topic_objs:' + author]) #recent in home +key hi_obj = KeyStrValue.get_or_insert('recent-topic-home') if hi_obj.value: t_list = hi_obj.value.split(',') t_list.insert(0, topic_key) hi_obj.value = ','.join(t_list[:RECENT_POST_NUM]) else: hi_obj.value = topic_key db.run_in_transaction(obj_runput, hi_obj, [ 'get_topic_objs:recent-topic-home', 'get_topic_key_title:recent-topic-home' ]) #all topic counter +1 at_obj = Counter.get_or_insert('all-topic-num', name='all-topic-num') at_obj.value += 1 db.run_in_transaction(obj_runput, at_obj) #notifications mentions = findall_mentions(t_obj.con, author) if mentions: deferred.defer(set_mentions, topic_key, ','.join(mentions), _countdown=8, _queue="default") self.redirect('/t-' + topic_key) return else: t_obj = Topic(title=title, con=content) errors.append(u"注意标题和内容的最大字数限制,当前字数:%s %d" % (len(title), len(content))) else: t_obj = Topic(title=title, con=content) errors.append("标题和内容必填") self.echo('newpost.html', { 'title': "发新帖子", 'errors': errors, 'n_obj': n_obj, 't_obj': t_obj, 'newest_node': Node.get_newest(), }, layout='_layout.html') else: self.error(403) self.write('403:forbidden')
def post(self, nodeid, topicid): if self.cur_user and self.cur_user.flag > 1: author = self.cur_user.name content = self.POST['content'] if content and len(content) <= COMMENT_MAX_S: int_time = int(time()) #check spam mi_obj = MemberInfo.get_or_insert(author) if self.cur_user.flag < 99: if mi_obj.replyt: t_list = mi_obj.replyt.split(',') if len(t_list) == MEMBER_RECENT_REPLY and ( int_time - int(t_list[-1])) < 3600: self.write( u'403:不要回复太频繁了 <a href="/t-%s-%s">请返回</a>' % (nodeid, topicid)) return #check repeat content = textilize(content) #safe_encode(content) con_md5 = md5(content.encode('utf-8')).hexdigest() if memcache.get('c_' + con_md5): self.write(u'403:请勿灌水 <a href="/t-%s-%s">请返回</a>' % (nodeid, topicid)) return else: memcache.set('c_' + con_md5, '1', 36000) topic_key = '%s-%s' % (nodeid, topicid) t_obj = Topic.get_by_key_name(topic_key) if not t_obj: self.error(404) self.write('404: not found') return if t_obj.cnum: id_num = t_obj.cnum + 1 else: id_num = 1 c_key = '%s-%d' % (topic_key, id_num) c_obj = Comment(key_name=c_key) c_obj.author = author c_obj.add = int_time c_obj.con = content c_obj.put() if c_obj.is_saved(): #topic commont count +1 t_obj.cnum = id_num t_obj.reply = author t_obj.edit = int_time db.run_in_transaction(obj_runput, t_obj) #memberinfo mi_obj.replyn += 1 if mi_obj.replyk: t_list = mi_obj.replyk.split(',') if topic_key in t_list: t_list.remove(topic_key) t_list.insert(0, topic_key) mi_obj.replyk = ','.join(t_list[:MEMBER_RECENT_REPLY]) else: mi_obj.replyk = topic_key if mi_obj.replyt: t_list = mi_obj.replyt.split(',') t_list.insert(0, str(int_time)) mi_obj.replyt = ','.join(t_list[:MEMBER_RECENT_REPLY]) else: mi_obj.replyt = str(int_time) db.run_in_transaction(obj_runput, mi_obj, ['reply_objs:' + author]) #recent reply +key hi_obj = KeyStrValue.get_or_insert('recent-reply-topic') if hi_obj.value: t_list = hi_obj.value.split(',') if topic_key in t_list: t_list.remove(topic_key) t_list.insert(0, topic_key) hi_obj.value = ','.join(t_list[:RECENT_COMMENT_NUM]) db.run_in_transaction( obj_runput, hi_obj, ['get_topic_key_title:recent-reply-topic']) else: hi_obj.value = topic_key db.run_in_transaction( obj_runput, hi_obj, ['get_topic_key_title:recent-reply-topic']) #all reply counter +1 at_obj = Counter.get_or_insert('all-reply-num', name='all-reply-num') at_obj.value += 1 db.run_in_transaction(obj_runput, at_obj) #notifications if t_obj.author != author: mentions = findall_mentions( c_obj.con + ' @%s ' % t_obj.author, author) else: mentions = findall_mentions(c_obj.con, author) if mentions: deferred.defer(set_mentions, topic_key, ','.join(mentions), _countdown=8, _queue="default") #del cache cache_keys = [] hi_obj = KeyStrValue.get_or_insert('recent-topic-home') if hi_obj.value: if topic_key in hi_obj.value.split(','): cache_keys.append( 'get_topic_objs:recent-topic-home') if id_num < EACH_PAGE_COMMENT_NUM: cache_keys.append('get_comments:%s:1' % topic_key) else: cache_keys.append('get_comments:%s:%d' % (topic_key, [ i for i in range(1, id_num, EACH_PAGE_COMMENT_NUM) ][-1])) if cache_keys: memcache.delete_multi(cache_keys) self.redirect('/t-%s#reply%d' % (topic_key, id_num)) return else: self.write('错误: 没有内容 或 内容太长了,请后退返回修改!') else: self.error(403) self.write('403:forbidden')
def post(self, nodeid='1'): if self.cur_user and self.cur_user.flag>1: n_obj = Node.get_by_id(int(nodeid)) if not n_obj: self.error(404) self.write('404: not found') return errors = [] author = self.cur_user.name title = self.POST['title'] content = self.POST['content'] if title and content: if len(title)<=TITLE_MAX_S and len(content)<=CONTENT_MAX_S: int_time = int(time()) #check spam mi_obj = MemberInfo.get_or_insert(author) if mi_obj.topict: t_list = mi_obj.topict.split(',') if len(t_list) == MEMBER_RECENT_TOPIC and (int_time-int(t_list[-1])) < 3600: self.write(u'403:不要发帖太频繁了 <a href="/newpost/%s">请返回</a>' % nodeid) return #check repeat content = textilize(content) #content = safe_encode(content) con_md5 = md5(content.encode('utf-8')).hexdigest() if memcache.get('c_'+con_md5): self.write(u'403:请勿灌水 <a href="/newpost/%s">请返回</a>' % nodeid) return else: memcache.set('c_'+con_md5, '1', 36000) if n_obj.count: topic_id = n_obj.count + 1 else: topic_id = 1 topic_key = '%s-%s' % (nodeid, str(topic_id)) t_obj = Topic(key_name=topic_key) t_obj.title = title t_obj.author = author t_obj.add = int_time t_obj.con = textilize(content) #t_obj.con = safe_encode(content) t_obj.put() if t_obj.is_saved(): #node count +1 n_obj.count += 1 db.run_in_transaction(obj_runput,n_obj) #memberinfo mi_obj.topicn += 1 if mi_obj.topick: t_list = mi_obj.topick.split(',') t_list.insert(0, topic_key) mi_obj.topick = ','.join(t_list[:MEMBER_RECENT_TOPIC]) else: mi_obj.topick = topic_key if mi_obj.topict: t_list = mi_obj.topict.split(',') t_list.insert(0, str(int_time)) mi_obj.topict = ','.join(t_list[:MEMBER_RECENT_TOPIC]) else: mi_obj.topict = str(int_time) db.run_in_transaction(obj_runput,mi_obj,['topic_objs:'+author]) #recent in home +key hi_obj = KeyStrValue.get_or_insert('recent-topic-home') if hi_obj.value: t_list = hi_obj.value.split(',') t_list.insert(0, topic_key) hi_obj.value = ','.join(t_list[:RECENT_POST_NUM]) else: hi_obj.value = topic_key db.run_in_transaction(obj_runput,hi_obj,['get_topic_objs:recent-topic-home', 'get_topic_key_title:recent-topic-home']) #all topic counter +1 at_obj = Counter.get_or_insert('all-topic-num', name = 'all-topic-num') at_obj.value += 1 db.run_in_transaction(obj_runput,at_obj) #notifications mentions = findall_mentions(t_obj.con, author) if mentions: deferred.defer(set_mentions, topic_key, ','.join(mentions), _countdown=8, _queue="default") self.redirect('/t-'+topic_key) return else: t_obj = Topic(title = title, con = content) errors.append(u"注意标题和内容的最大字数限制,当前字数:%s %d" % (len(title), len(content))) else: t_obj = Topic(title = title, con = content) errors.append("标题和内容必填") self.echo('newpost.html', { 'title': "发新帖子", 'errors':errors, 'n_obj': n_obj, 't_obj': t_obj, 'newest_node': Node.get_newest(), }, layout='_layout.html') else: self.error(403) self.write('403:forbidden')
def get(self): self.header['Content-Type'] = "application/atom+xml" self.echo('index.xml', { 'posts':KeyStrValue.get_topic_objs('recent-topic-home')[:FEED_NUM], 'site_updated':int(time()), })
def post(self, nodeid, topicid): if self.cur_user and self.cur_user.flag>1: author = self.cur_user.name content = self.POST['content'] if content and len(content)<=COMMENT_MAX_S: int_time = int(time()) #check spam mi_obj = MemberInfo.get_or_insert(author) if mi_obj.replyt: t_list = mi_obj.replyt.split(',') if len(t_list) == MEMBER_RECENT_REPLY and (int_time-int(t_list[-1])) < 3600: self.write(u'403:不要回复太频繁了 <a href="/t-%s-%s">请返回</a>' % (nodeid, topicid)) return #check repeat content = textilize(content) #content = safe_encode(content) con_md5 = md5(content.encode('utf-8')).hexdigest() if memcache.get('c_'+con_md5): self.write(u'403:请勿灌水 <a href="/t-%s-%s">请返回</a>' % (nodeid, topicid)) return else: memcache.set('c_'+con_md5, '1', 36000) topic_key = '%s-%s' % (nodeid, topicid) t_obj = Topic.get_by_key_name(topic_key) if not t_obj: self.error(404) self.write('404: not found') return if t_obj.cnum: id_num = t_obj.cnum + 1 else: id_num = 1 c_key = '%s-%d' % (topic_key, id_num) c_obj = Comment(key_name=c_key) c_obj.author = author c_obj.add = int_time c_obj.con = content c_obj.put() if c_obj.is_saved(): #topic commont count +1 t_obj.cnum = id_num t_obj.reply = author t_obj.edit = int_time db.run_in_transaction(obj_runput,t_obj) #memberinfo mi_obj.replyn += 1 if mi_obj.replyk: t_list = mi_obj.replyk.split(',') if topic_key in t_list: t_list.remove(topic_key) t_list.insert(0, topic_key) mi_obj.replyk = ','.join(t_list[:MEMBER_RECENT_REPLY]) else: mi_obj.replyk = topic_key if mi_obj.replyt: t_list = mi_obj.replyt.split(',') t_list.insert(0, str(int_time)) mi_obj.replyt = ','.join(t_list[:MEMBER_RECENT_REPLY]) else: mi_obj.replyt = str(int_time) db.run_in_transaction(obj_runput,mi_obj,['reply_objs:'+author]) #recent reply +key hi_obj = KeyStrValue.get_or_insert('recent-reply-topic') if hi_obj.value: t_list = hi_obj.value.split(',') if topic_key in t_list: t_list.remove(topic_key) t_list.insert(0, topic_key) hi_obj.value = ','.join(t_list[:RECENT_COMMENT_NUM]) db.run_in_transaction(obj_runput,hi_obj,['get_topic_key_title:recent-reply-topic']) else: hi_obj.value = topic_key db.run_in_transaction(obj_runput,hi_obj,['get_topic_key_title:recent-reply-topic']) #all reply counter +1 at_obj = Counter.get_or_insert('all-reply-num', name = 'all-reply-num') at_obj.value += 1 db.run_in_transaction(obj_runput,at_obj) #notifications if t_obj.author != author: mentions = findall_mentions(c_obj.con+' @%s '%t_obj.author, author) else: mentions = findall_mentions(c_obj.con, author) if mentions: deferred.defer(set_mentions, topic_key, ','.join(mentions), _countdown=8, _queue="default") #del cache cache_keys = [] hi_obj = KeyStrValue.get_or_insert('recent-topic-home') if hi_obj.value: if topic_key in hi_obj.value.split(','): cache_keys.append('get_topic_objs:recent-topic-home') if id_num<EACH_PAGE_COMMENT_NUM: cache_keys.append('get_comments:%s:1' % topic_key) else: cache_keys.append('get_comments:%s:%d' % (topic_key, [i for i in range(1,id_num,EACH_PAGE_COMMENT_NUM)][-1])) if cache_keys: memcache.delete_multi(cache_keys) self.redirect('/t-%s#reply%d'%(topic_key,id_num)) return else: self.write('错误: 没有内容 或 内容太长了,请后退返回修改!') else: self.error(403) self.write('403:forbidden')