Пример #1
0
    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)
Пример #2
0
 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)
Пример #3
0
    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')
Пример #4
0
 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')        
Пример #5
0
    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)
Пример #6
0
 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)
Пример #7
0
    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')
Пример #8
0
    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 (请返回填写内容 或 内容太长了)')
Пример #9
0
 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')
Пример #10
0
 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 (请返回填写内容 或 内容太长了)')
Пример #11
0
    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')
Пример #12
0
    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')
Пример #13
0
 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')
Пример #14
0
 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')