def post(self): user = self.getAuthentificatedUser() if not user: return id = self.request.get('id') try: thread = Thread.get(db.Key.from_path('Thread', int(id))) except: return name = strip_ml_tags(self.request.get('name')) if name == '': template_values = { 'topics' : self.topics, 'name' : name, } else: topic = Topic() #parent=thread topic.thread = thread topic.name = name if users.get_current_user(): topic.author = users.get_current_user() topic.put() mode = self.request.get('mode') self.redirect('/view?id=' + str(topic.key().id())) return template_values = { 'topics' : self.topics, 'name' : '', } path = os.path.join(os.path.dirname(__file__), os.path.join('templates', 'addTopic.htm')) self.response.out.write(template.render(path, template_values))
def post(self): user = users.get_current_user() if not user: self.response.out.write('~!@#$%') return if (not self.request.get('sentence')): self.response.out.write(json_output('error', { 'message': 'empty sentence', })) return if (not self.request.get('answer')): self.response.out.write(json_output('error', { 'message': 'empty answer', })) return topic = Topic() topic.author = users.get_current_user() topic.sentence = self.request.get('sentence')[:300] topic.answer = self.request.get('answer') topic.put() memcache.delete('topic_list::latest'+user.user_id()) if self.is_ajax: self.response.out.write(json_output('ok', { 'user': topic.author.nickname(), 'sentence': topic.sentence, 'answer': topic.answer, })) else: self.redirect('/')
def post(self): user = users.get_current_user() if not user: self.response.out.write('~!@#$%') return if (not self.request.get('sentence')): self.response.out.write( json_output('error', { 'message': 'empty sentence', })) return if (not self.request.get('answer')): self.response.out.write( json_output('error', { 'message': 'empty answer', })) return topic = Topic() topic.author = users.get_current_user() topic.sentence = self.request.get('sentence')[:300] topic.answer = self.request.get('answer') topic.put() memcache.delete('topic_list::latest' + user.user_id()) if self.is_ajax: self.response.out.write( json_output( 'ok', { 'user': topic.author.nickname(), 'sentence': topic.sentence, 'answer': topic.answer, })) else: self.redirect('/')
from __future__ import print_function import sys from model import Session, User, Topic session = Session() # Add a user to a topic. t1 = Topic("and now for something completely different") t1.author = User("xyzzy") # Add some topics to a user. u2 = User("plugh") u2.topics = [ Topic("my hovercraft is full of eels"), Topic("he is pining for the fjords"), ] try: session.add(t1) session.add(u2) session.commit() except Exception as e: print("Failed:", e) session.rollback() sys.exit(1)
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='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')