def post(self): t_key = str(self.get_argument('key', '')) content = self.get_argument('content', '') if t_key and content: t_obj = Comment.get_by_key(t_key) if t_obj: t_obj['content'] = textilize(content) if Commomkvdb.save(t_key, t_obj): self.redirect('/edit-comment?key=%s' % t_key) return self.redirect('/edit-comment?key=%s' % t_key)
def post(self): t_key = str(self.get_argument('key','')) content = self.get_argument('content','') if t_key and content: t_obj = Comment.get_by_key(t_key) if t_obj: t_obj['content'] = textilize(content) if Commomkvdb.save(t_key, t_obj): self.redirect('/edit-comment?key=%s'%t_key) return self.redirect('/edit-comment?key=%s'%t_key)
def post(self): if self.cur_user and self.cur_user.flag == 99: t_key = self.request.get('key') content = self.POST['content'] if t_key and content: t_obj = Comment.get_by_key_name(t_key) if t_obj: t_obj.con = textilize(content) db.run_in_transaction(obj_runput, t_obj) self.redirect('/edit-comment?key=%s' % str(t_key)) else: self.error(403) self.write('403:forbidden')
def post(self): if self.cur_user and self.cur_user.flag==99: t_key = self.request.get('key') content = self.POST['content'] if t_key and content: t_obj = Comment.get_by_key_name(t_key) if t_obj: t_obj.con = textilize(content) db.run_in_transaction(obj_runput, t_obj) self.redirect('/edit-comment?key=%s'%str(t_key)) else: self.error(403) self.write('403:forbidden')
def post(self): t_key = str(self.get_argument('key', '')) title = self.get_argument('title', '') content = self.get_argument('content', '') hide = self.get_argument('hide', '') if t_key and title and content: t_obj = Topic.get_by_key(t_key) if t_obj: t_obj['title'] = title t_obj['content'] = textilize(content) if hide: t_obj['hide'] = hide else: if t_obj.has_key('hide'): del t_obj['hide'] if Commomkvdb.save(t_key, t_obj): self.redirect('/edit-post?key=%s' % t_key) return self.redirect('/edit-post?key=%s' % t_key)
def post(self): t_key = str(self.get_argument('key','')) title = self.get_argument('title','') content = self.get_argument('content','') hide = self.get_argument('hide','') if t_key and title and content: t_obj = Topic.get_by_key(t_key) if t_obj: t_obj['title'] = title t_obj['content'] = textilize(content) if hide: t_obj['hide'] = hide else: if t_obj.has_key('hide'): del t_obj['hide'] if Commomkvdb.save(t_key, t_obj): self.redirect('/edit-post?key=%s'%t_key) return self.redirect('/edit-post?key=%s'%t_key)
def post(self, nodeid='1'): n_obj = Node.get_by_key('n-' + str(nodeid)) if not n_obj: self.set_status(404) self.write('404') return errors = [] author = str(self.get_cookie('username', '')) title = self.get_argument('title', '') content = self.get_argument('content', '') t_obj = TOPIC_DICT.copy() if title and content: if len(title) <= TITLE_MAX_S and len(content) <= CONTENT_MAX_S: int_time = int(time()) #check spam u_topic_time = kv.get('u_topic_time:' + author) if u_topic_time: tlist = u_topic_time.split(',') if len(tlist) == MEMBER_RECENT_TOPIC and ( int_time - int(tlist[-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 mc.get('c_' + con_md5): self.write(u'403:请勿灌水 <a href="/newpost/%s">请返回</a>' % nodeid) return else: mc.set('c_' + con_md5, '1', 36000) t_obj['title'] = title t_obj['nodeid'] = str(nodeid) t_obj['nodename'] = n_obj['name'] t_obj['author'] = author t_obj['add'] = int_time t_obj['content'] = content if n_obj['count']: topic_id = int(n_obj['count']) + 1 else: topic_id = 1 if Topic.add(topic_id, t_obj): topic_key = 't-%s-%s' % (str(nodeid), str(topic_id)) #node count +1 n_obj['count'] = str(topic_id) Commomkvdb.save('n-' + str(nodeid), n_obj) #member recent +key #Member.add_key_rencent_topic(author, topic_key) rt_obj = kv.get('topic-' + author) if rt_obj: olist = rt_obj.split(',') if topic_key not in olist: olist.insert(0, topic_key) rt_obj = ','.join(olist[:MEMBER_RECENT_TOPIC]) kv.set('topic-' + author, rt_obj) else: rt_obj = topic_key kv.set('topic-' + author, topic_key) #recent in home +key Commomkvdb.add_key_rencent_topic('recent-topic-home', topic_key) #all topic counter +1 Count.key_incr('all-topic-num') #hot node tqueue = TaskQueue('default') tqueue.add( Task('/task/hotnode/%s/%s' % ('n-' + str(nodeid), str(topic_id)), delay=5)) #notifications mentions = findall_mentions(t_obj['content'], author) if mentions: tqueue.add( Task('/task/mentions/' + topic_key, 'member=' + ','.join(mentions), delay=8)) #set for check spam #u_topic_time = kv.get('u_topic_time:'+author) if u_topic_time: tlist = u_topic_time.split(',') if str(int_time) not in tlist: tlist.insert(0, str(int_time)) u_topic_time = ','.join( tlist[:MEMBER_RECENT_TOPIC]) kv.set('u_topic_time:' + author, u_topic_time) else: u_topic_time = str(int_time) kv.set('u_topic_time:' + author, u_topic_time) ##set new sr_code cur_user = self.cur_user() code_list = [cur_user['code'], u_topic_time] u_comment_time = kv.get('u_comment_time:' + author) if u_comment_time: code_list.append(u_comment_time) self.set_cookie('usercode', md5(''.join(code_list)).hexdigest(), path="/", expires_days=365) #del cache clear_cache_multi([ 'get_topic_by_keys:recent-topic-home', 'get_topic_by_keys:topic-' + author, 'get_comment_topic_by_keys:recent-topic-home', 'get_comment_topic_by_keys:recent-comment-topic-home', 'cur_user:'******'/' + topic_key) return else: errors.append("服务器出现错误,请稍后再试") else: t_obj['title'] = title t_obj['content'] = content errors.append(u"注意标题和内容的最大字数:%s %d" % (len(title), len(content))) else: errors.append("标题和内容必填") self.echo('newpost.html', { 'title': "发新帖子", 'errors': errors, 'n_obj': n_obj, 't_obj': t_obj, }, layout='_layout.html')
def post(self, nodeid, topicid): author = str(self.get_cookie('username', '')) content = self.get_argument('content', '') if author and content and len(content) <= COMMENT_MAX_S: int_time = int(time()) #check spam u_comment_time = kv.get('u_comment_time:' + author) if u_comment_time: tlist = u_comment_time.split(',') if len(tlist) == MEMBER_RECENT_TOPIC and ( int_time - int(tlist[-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 mc.get('c_' + con_md5): self.write(u'403:请勿灌水 <a href="/t-%s-%s">请返回</a>' % (nodeid, topicid)) return else: mc.set('c_' + con_md5, '1', 36000) ## t_key = 't-%s-%s' % (str(nodeid), str(topicid)) t_obj = Topic.get_by_key(t_key) if t_obj['cnum']: id_num = int(t_obj['cnum']) + 1 else: id_num = 1 c_key = 't-%s-%s-%d' % (str(nodeid), str(topicid), id_num) c_obj = COMMENT_DICT.copy() c_obj['author'] = author c_obj['add'] = int_time c_obj['content'] = content if Commomkvdb.save(c_key, c_obj): #topic commont count +1 t_obj['cnum'] = id_num t_obj['reply'] = author t_obj['edit'] = int_time Commomkvdb.save(t_key, t_obj) #member recent +key #Member.add_key_rencent_comment_topic(author, t_key) rt_obj = kv.get('comment-topic-' + author) if rt_obj: olist = rt_obj.split(',') if t_key in olist: olist.remove(t_key) olist.insert(0, t_key) kv.set('comment-topic-' + author, ','.join(olist[:MEMBER_RECENT_TOPIC])) else: kv.set('comment-topic-' + author, t_key) #recent comment in home +key Commomkvdb.add_key_rencent_topic('recent-comment-topic-home', t_key) #all comment counter +1 Count.key_incr('all-comment-num') #notifications if t_obj['author'] != author: mentions = findall_mentions( c_obj['content'] + ' @%s ' % t_obj['author'], author) else: mentions = findall_mentions(c_obj['content'], author) if mentions: tqueue = TaskQueue('default') tqueue.add( Task('/task/mentions/' + t_key, 'member=' + ','.join(mentions), delay=5)) #set for check spam #u_comment_time = kv.get('u_comment_time:'+author) if u_comment_time: tlist = u_comment_time.split(',') if str(int_time) not in tlist: tlist.insert(0, str(int_time)) u_comment_time = ','.join(tlist[:MEMBER_RECENT_TOPIC]) kv.set('u_comment_time:' + author, u_comment_time) else: u_comment_time = str(int_time) kv.set('u_comment_time:' + author, u_comment_time) ##set new sr_code cur_user = self.cur_user() code_list = [cur_user['code']] u_topic_time = kv.get('u_topic_time:' + author) if u_topic_time: code_list.append(u_topic_time) if u_comment_time: code_list.append(u_comment_time) self.set_cookie('usercode', md5(''.join(code_list)).hexdigest(), path="/", expires_days=365) #del cache cachekeys = [ 'get_topic_by_keys:recent-comment-topic-home', 'get_topic_by_keys:comment-topic-' + author, 'get_comment_topic_by_keys:recent-topic-home', 'get_comment_topic_by_keys:recent-comment-topic-home', 'cur_user:'******'recent-topic-home') if tks and t_key in tks.split(','): cachekeys.append('get_topic_by_keys:recent-topic-home') if id_num < EACH_PAGE_COMMENT_NUM: cachekeys.append('get_comments:%s:1' % t_key) else: cachekeys.append('get_comments:%s:%d' % (t_key, [ i for i in range(1, id_num, EACH_PAGE_COMMENT_NUM) ][-1])) clear_cache_multi(cachekeys) self.redirect('/' + t_key) return else: self.set_status(403) self.write('错误: 403 (请返回填写内容 或 内容太长了)')
def post(self, nodeid='1'): n_obj = Node.get_by_key('n-'+str(nodeid)) if not n_obj: self.set_status(404) self.write('404') return errors = [] author = str(self.get_cookie('username','')) title = self.get_argument('title','') content = self.get_argument('content','') t_obj = TOPIC_DICT.copy() if title and content: if len(title)<=TITLE_MAX_S and len(content)<=CONTENT_MAX_S: int_time = int(time()) #check spam u_topic_time = kv.get('u_topic_time:'+author) if u_topic_time: tlist = u_topic_time.split(',') if len(tlist)== MEMBER_RECENT_TOPIC and (int_time-int(tlist[-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 mc.get('c_'+con_md5): self.write(u'403:请勿灌水 <a href="/newpost/%s">请返回</a>' % nodeid) return else: mc.set('c_'+con_md5, '1', 36000) t_obj['title'] = title t_obj['nodeid'] = str(nodeid) t_obj['nodename'] = n_obj['name'] t_obj['author'] = author t_obj['add'] = int_time t_obj['content'] = content if n_obj['count']: topic_id = int(n_obj['count']) + 1 else: topic_id = 1 if Topic.add(topic_id, t_obj): topic_key = 't-%s-%s' % (str(nodeid), str(topic_id)) #node count +1 n_obj['count'] = str(topic_id) Commomkvdb.save('n-'+str(nodeid), n_obj) #member recent +key #Member.add_key_rencent_topic(author, topic_key) rt_obj = kv.get('topic-'+author) if rt_obj: olist = rt_obj.split(',') if topic_key not in olist: olist.insert(0, topic_key) rt_obj = ','.join(olist[:MEMBER_RECENT_TOPIC]) kv.set('topic-'+author, rt_obj) else: rt_obj = topic_key kv.set('topic-'+author, topic_key) #recent in home +key Commomkvdb.add_key_rencent_topic('recent-topic-home', topic_key) #all topic counter +1 Count.key_incr('all-topic-num') #hot node tqueue = TaskQueue('default') tqueue.add(Task('/task/hotnode/%s/%s' % ('n-'+str(nodeid), str(topic_id)), delay=5)) #notifications mentions = findall_mentions(t_obj['content'], author) if mentions: tqueue.add(Task('/task/mentions/'+topic_key, 'member='+','.join(mentions), delay=8)) #set for check spam #u_topic_time = kv.get('u_topic_time:'+author) if u_topic_time: tlist = u_topic_time.split(',') if str(int_time) not in tlist: tlist.insert(0, str(int_time)) u_topic_time = ','.join(tlist[:MEMBER_RECENT_TOPIC]) kv.set('u_topic_time:'+author, u_topic_time) else: u_topic_time = str(int_time) kv.set('u_topic_time:'+author, u_topic_time) ##set new sr_code cur_user = self.cur_user() code_list = [cur_user['code'],u_topic_time] u_comment_time = kv.get('u_comment_time:'+author) if u_comment_time: code_list.append(u_comment_time) self.set_cookie('usercode', md5(''.join(code_list)).hexdigest(), path="/", expires_days = 365 ) #del cache clear_cache_multi(['get_topic_by_keys:recent-topic-home','get_topic_by_keys:topic-' + author, 'get_comment_topic_by_keys:recent-topic-home', 'get_comment_topic_by_keys:recent-comment-topic-home','cur_user:'******'/'+topic_key) return else: errors.append("服务器出现错误,请稍后再试") else: t_obj['title'] = title t_obj['content'] = content errors.append(u"注意标题和内容的最大字数:%s %d" % (len(title), len(content))) else: errors.append("标题和内容必填") self.echo('newpost.html', { 'title': "发新帖子", 'errors':errors, 'n_obj': n_obj, 't_obj': t_obj, }, layout='_layout.html')
def post(self, nodeid, topicid): author = str(self.get_cookie('username','')) content = self.get_argument('content','') if author and content and len(content)<=COMMENT_MAX_S: int_time = int(time()) #check spam u_comment_time = kv.get('u_comment_time:'+author) if u_comment_time: tlist = u_comment_time.split(',') if len(tlist)== MEMBER_RECENT_TOPIC and (int_time-int(tlist[-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 mc.get('c_'+con_md5): self.write(u'403:请勿灌水 <a href="/t-%s-%s">请返回</a>' % (nodeid, topicid)) return else: mc.set('c_'+con_md5, '1', 36000) ## t_key = 't-%s-%s' % (str(nodeid), str(topicid)) t_obj = Topic.get_by_key(t_key) if t_obj['cnum']: id_num = int(t_obj['cnum']) + 1 else: id_num = 1 c_key = 't-%s-%s-%d' % (str(nodeid), str(topicid), id_num) c_obj = COMMENT_DICT.copy() c_obj['author'] = author c_obj['add'] = int_time c_obj['content'] = content if Commomkvdb.save(c_key, c_obj): #topic commont count +1 t_obj['cnum'] = id_num t_obj['reply'] = author t_obj['edit'] = int_time Commomkvdb.save(t_key, t_obj) #member recent +key #Member.add_key_rencent_comment_topic(author, t_key) rt_obj = kv.get('comment-topic-'+author) if rt_obj: olist = rt_obj.split(',') if t_key in olist: olist.remove(t_key) olist.insert(0, t_key) kv.set('comment-topic-'+author, ','.join(olist[:MEMBER_RECENT_TOPIC])) else: kv.set('comment-topic-'+author, t_key) #recent comment in home +key Commomkvdb.add_key_rencent_topic('recent-comment-topic-home', t_key) #all comment counter +1 Count.key_incr('all-comment-num') #notifications if t_obj['author'] != author: mentions = findall_mentions(c_obj['content']+' @%s '%t_obj['author'], author) else: mentions = findall_mentions(c_obj['content'], author) if mentions: tqueue = TaskQueue('default') tqueue.add(Task('/task/mentions/'+t_key, 'member='+','.join(mentions), delay=5)) #set for check spam #u_comment_time = kv.get('u_comment_time:'+author) if u_comment_time: tlist = u_comment_time.split(',') if str(int_time) not in tlist: tlist.insert(0, str(int_time)) u_comment_time = ','.join(tlist[:MEMBER_RECENT_TOPIC]) kv.set('u_comment_time:'+author, u_comment_time) else: u_comment_time = str(int_time) kv.set('u_comment_time:'+author, u_comment_time) ##set new sr_code cur_user = self.cur_user() code_list = [cur_user['code']] u_topic_time = kv.get('u_topic_time:'+author) if u_topic_time: code_list.append(u_topic_time) if u_comment_time: code_list.append(u_comment_time) self.set_cookie('usercode', md5(''.join(code_list)).hexdigest(), path="/", expires_days = 365 ) #del cache cachekeys = ['get_topic_by_keys:recent-comment-topic-home', 'get_topic_by_keys:comment-topic-'+author, 'get_comment_topic_by_keys:recent-topic-home', 'get_comment_topic_by_keys:recent-comment-topic-home','cur_user:'******'recent-topic-home') if tks and t_key in tks.split(','): cachekeys.append('get_topic_by_keys:recent-topic-home') if id_num<EACH_PAGE_COMMENT_NUM: cachekeys.append('get_comments:%s:1' % t_key) else: cachekeys.append('get_comments:%s:%d' % (t_key, [i for i in range(1,id_num,EACH_PAGE_COMMENT_NUM)][-1])) clear_cache_multi(cachekeys) self.redirect('/'+t_key) return else: self.set_status(403) self.write('错误: 403 (请返回填写内容 或 内容太长了)')
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 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')