def get(self, id, title): obj = self.db.get("SELECT p.id,p.cid,p.views,p.title,p.html,p.tags,p.add_time,c.name as cname FROM oppy_post p LEFT JOIN oppy_category c ON p.cid=c.id WHERE p.id = %s", int(id)) if obj: qt = quoted_string(obj["title"]) if obj["title"].replace(" ", "-") != title: self.redirect("/topic/%d/%s" % (int(id), qt)) return #nearly article table_status = self.db.query("SHOW TABLE STATUS LIKE 'oppy_post'")[0] max_id = table_status["Auto_increment"] - 1 new_id = int(id) + 1 old_id = int(id) - 1 new_obj = old_obj = None if new_id <= max_id: new_obj = self.db.get("SELECT id,title FROM oppy_post WHERE id = %s", new_id) if old_id > 0: old_obj = self.db.get("SELECT id,title FROM oppy_post WHERE id = %s", old_id) #Related articles, base similar tag related_posts = None if RELATED_NUM > 0 and obj["tags"]: id_dic = {} for tag in obj["tags"].split(","): tag_obj = self.db.get("SELECT num,content FROM oppy_tag WHERE name = %s LIMIT 1", tag) if tag_obj and tag_obj["num"]>1: id_list = tag_obj["content"].split(",") id_list.remove(str(id)) for tid in id_list: try: id_dic[tid] += 1 except: id_dic[tid] = 1 ## sort if id_dic: id_tuple = sorted(id_dic.items(), key=lambda id_dic:id_dic[1], reverse=True)[:RELATED_NUM] id_list = [int(x[0]) for x in id_tuple] if len(id_list) == 1: related_posts = self.db.query("SELECT id,title FROM oppy_post WHERE id = %s", int(id_list[0])) else: related_posts = self.db.query("SELECT id,title FROM oppy_post WHERE id in(%s)" % ",".join([str(x) for x in id_list])) self.echo("blog_detail.html", { "title": "%s - %s" % (obj["title"], SITE_TITLE), "description": "%s - %s" % (obj["cname"], get_des(obj["html"])), "keywords": obj["tags"], "qt": qt, "obj": obj, "new_obj": new_obj, "old_obj": old_obj, "related_posts": related_posts, "recent_posts": self.db.query("SELECT id,title FROM oppy_post ORDER BY id DESC LIMIT %d" % RECENT_POST_NUM ), "cats": self.db.query("SELECT id,name,num FROM oppy_category LIMIT %d" % SIDER_CAT_NUM), "tags": self.db.query("SELECT name,num FROM oppy_tag ORDER BY num DESC LIMIT %d" % SIDER_TAG_NUM), }) self.dbm.execute("UPDATE oppy_post SET views = views + 1 WHERE id = %s LIMIT 1", int(id)) else: raise tornado.web.HTTPError(404)
def get(self, id, name): cobj = self.db.get( "SELECT id,name,num FROM oppy_category WHERE id = %s", int(id)) if cobj: qt = quoted_string(cobj["name"]) if cobj["name"] != name: self.redirect("/category/%d/%s" % (int(id), qt)) return if cobj["num"] == 0: self.write("该分类下还没文章") return page = int(self.get_argument("page", 1)) total_page = cobj["num"] / EACH_PAGE_POST_NUM if cobj["num"] % EACH_PAGE_POST_NUM: total_page += 1 if page > total_page: page = total_page self.redirect("/category/%d/%s?page=%d" % (int(id), qt, page)) return elif page < 1: page = 1 self.redirect("/category/%d/%s?page=%d" % (int(id), qt, page)) return offset = EACH_PAGE_POST_NUM * (page - 1) self.echo( "category_index.html", { "title": "Category:%s - %s" % (cobj["name"], SITE_TITLE), "qt": qt, "cobj": cobj, "page": page, "total_page": total_page, "objs": self.db.query( "SELECT id,title,add_time FROM oppy_post WHERE cid = %d ORDER BY id DESC LIMIT %d,%d" % (int(id), offset, EACH_PAGE_POST_NUM)), "recent_posts": self.db.query( "SELECT id,title FROM oppy_post ORDER BY id DESC LIMIT %d" % RECENT_POST_NUM), "cats": self.db.query( "SELECT id,name,num FROM oppy_category LIMIT %d" % SIDER_CAT_NUM), "tags": self.db.query( "SELECT name,num FROM oppy_tag ORDER BY num DESC LIMIT %d" % SIDER_TAG_NUM), }) else: raise tornado.web.HTTPError(404)
def post(self): self.set_header('Content-Type', 'application/json') rspd = {'status': 201, 'msg': 'ok'} try: tf = {'true': 1, 'false': 0} timestamp = int(time()) post_dic = { 'category': self.get_argument("cat"), 'title': self.get_argument("tit"), 'content': self.get_argument("con"), 'tags': self.get_argument("tag", '').replace(u',', ','), 'closecomment': self.get_argument("clo", '0'), 'password': self.get_argument("password", ''), 'add_time': timestamp, 'edit_time': timestamp, } if post_dic['tags']: tagslist = set( [x.strip() for x in post_dic['tags'].split(',')]) try: tagslist.remove('') except: pass if tagslist: post_dic['tags'] = ','.join(tagslist) post_dic['closecomment'] = tf[post_dic['closecomment'].lower()] except: rspd['status'] = 500 rspd['msg'] = '错误: 注意必填的三项' self.write(json.dumps(rspd)) return postid = Article.add_new_article(post_dic) if postid: Category.add_postid_to_cat(post_dic['category'], str(postid)) if post_dic['tags']: Tag.add_postid_to_tags(post_dic['tags'].split(','), str(postid)) rspd['status'] = 200 rspd[ 'msg'] = '完成: 你已经成功添加了一篇文章 <a href="/t/%s" target="_blank">查看</a>' % str( postid) clear_cache_by_pathlist( ['/', 'cat:%s' % quoted_string(post_dic['category'])]) if not debug: add_task('default', '/task/pingrpctask') self.write(json.dumps(rspd)) return else: rspd['status'] = 500 rspd['msg'] = '错误: 未知错误,请尝试重新提交' self.write(json.dumps(rspd)) return
def get(self, name): name = unquote(name.encode('utf-8')).decode('utf-8') tobj = self.db.get( "SELECT id,name,num,content FROM oppy_tag WHERE name = %s", name) if tobj: qt = quoted_string(tobj["name"]) if tobj["num"] < 1: self.write("该标签下还没有文章") return page = int(self.get_argument("page", 1)) total_page = tobj["num"] / EACH_PAGE_POST_NUM if tobj["num"] % EACH_PAGE_POST_NUM: total_page += 1 if page > total_page: page = total_page self.redirect("/tag/%s?page=%d" % (qt, page)) return elif page < 1: page = 1 self.redirect("/tag/%s?page=%d" % (qt, page)) return from_i = EACH_PAGE_POST_NUM * (page - 1) id_list = tobj["content"].split(",")[from_i:(from_i + EACH_PAGE_POST_NUM)] self.echo( "tag_index.html", { "title": "Tag:%s - %s" % (tobj["name"], SITE_TITLE), "qt": qt, "tobj": tobj, "page": page, "total_page": total_page, "objs": self.db.query( "SELECT id,title,add_time FROM oppy_post WHERE id in(%s) ORDER BY id DESC" % ",".join(id_list)), "recent_posts": self.db.query( "SELECT id,title FROM oppy_post ORDER BY id DESC LIMIT %d" % RECENT_POST_NUM), "cats": self.db.query( "SELECT id,name,num FROM oppy_category LIMIT %d" % SIDER_CAT_NUM), "tags": self.db.query( "SELECT name,num FROM oppy_tag ORDER BY num DESC LIMIT %d" % SIDER_TAG_NUM), }) else: raise tornado.web.HTTPError(404)
def post(self): self.set_header('Content-Type','application/json') rspd = {'status': 201, 'msg':'ok'} try: tf = {'true':1,'false':0} timestamp = int(time()) post_dic = { 'category': self.get_argument("cat"), 'title': self.get_argument("tit"), 'content': self.get_argument("con"), 'tags': self.get_argument("tag",'').replace(u',',','), 'closecomment': self.get_argument("clo",'0'), 'password': self.get_argument("password",''), 'add_time': timestamp, 'edit_time': timestamp, } if post_dic['tags']: tagslist = set([x.strip() for x in post_dic['tags'].split(',')]) try: tagslist.remove('') except: pass if tagslist: post_dic['tags'] = ','.join(tagslist) post_dic['closecomment'] = tf[post_dic['closecomment'].lower()] except: rspd['status'] = 500 rspd['msg'] = '错误: 注意必填的三项' self.write(json.dumps(rspd)) return postid = Article.add_new_article(post_dic) if postid: Category.add_postid_to_cat(post_dic['category'], str(postid)) if post_dic['tags']: Tag.add_postid_to_tags(post_dic['tags'].split(','), str(postid)) rspd['status'] = 200 rspd['msg'] = '完成: 你已经成功添加了一篇文章 <a href="/t/%s" target="_blank">查看</a>' % str(postid) clear_cache_by_pathlist(['/', 'cat:%s' % quoted_string(post_dic['category'])]) if not debug: add_task('default', '/task/pingrpctask') self.write(json.dumps(rspd)) return else: rspd['status'] = 500 rspd['msg'] = '错误: 未知错误,请尝试重新提交' self.write(json.dumps(rspd)) return
def post(self): self.set_header("Content-Type", "application/json") rspd = {"status": 201, "msg": "ok"} try: tf = {"true": 1, "false": 0} timestamp = int(time()) post_dic = { "category": self.get_argument("cat"), "title": self.get_argument("tit"), "content": self.get_argument("con"), "tags": self.get_argument("tag", "").replace(u",", ","), "closecomment": self.get_argument("clo", "0"), "password": self.get_argument("password", ""), "add_time": timestamp, "edit_time": timestamp, } if post_dic["tags"]: tagslist = set([x.strip() for x in post_dic["tags"].split(",")]) try: tagslist.remove("") except: pass if tagslist: post_dic["tags"] = ",".join(tagslist) post_dic["closecomment"] = tf[post_dic["closecomment"].lower()] except: rspd["status"] = 500 rspd["msg"] = "错误: 注意必填的三项" self.write(json.dumps(rspd)) return postid = Article.add_new_article(post_dic) if postid: Category.add_postid_to_cat(post_dic["category"], str(postid)) if post_dic["tags"]: Tag.add_postid_to_tags(post_dic["tags"].split(","), str(postid)) rspd["status"] = 200 rspd["msg"] = '完成: 你已经成功添加了一篇文章 <a href="/t/%s" target="_blank">查看</a>' % str(postid) clear_cache_by_pathlist(["/", "cat:%s" % quoted_string(post_dic["category"])]) if not debug: add_task("default", "/task/pingrpctask") self.write(json.dumps(rspd)) return else: rspd["status"] = 500 rspd["msg"] = "错误: 未知错误,请尝试重新提交" self.write(json.dumps(rspd)) return
def get(self, id, name): cobj = self.db.get("SELECT id,name,num FROM oppy_category WHERE id = %s", int(id)) if cobj: qt = quoted_string(cobj["name"]) if cobj["name"] != name: self.redirect("/category/%d/%s" % (int(id), qt)) return if cobj["num"] == 0: self.write("该分类下还没文章") return page = int(self.get_argument("page", 1)) total_page = cobj["num"]/EACH_PAGE_POST_NUM if cobj["num"]%EACH_PAGE_POST_NUM: total_page += 1 if page > total_page: page = total_page self.redirect("/category/%d/%s?page=%d" % (int(id), qt, page)) return elif page < 1: page = 1 self.redirect("/category/%d/%s?page=%d" % (int(id), qt, page)) return offset = EACH_PAGE_POST_NUM * (page-1) self.echo("category_index.html", { "title": "Category:%s - %s" % (cobj["name"], SITE_TITLE), "qt": qt, "cobj": cobj, "page": page, "total_page": total_page, "objs": self.db.query("SELECT id,title,add_time FROM oppy_post WHERE cid = %d ORDER BY id DESC LIMIT %d,%d" % (int(id), offset, EACH_PAGE_POST_NUM) ), "recent_posts": self.db.query("SELECT id,title FROM oppy_post ORDER BY id DESC LIMIT %d" % RECENT_POST_NUM ), "cats": self.db.query("SELECT id,name,num FROM oppy_category LIMIT %d" % SIDER_CAT_NUM), "tags": self.db.query("SELECT name,num FROM oppy_tag ORDER BY num DESC LIMIT %d" % SIDER_TAG_NUM), }) else: raise tornado.web.HTTPError(404)
def get(self, name): name = unquote(name.encode('utf-8')).decode('utf-8') tobj = self.db.get("SELECT id,name,num,content FROM oppy_tag WHERE name = %s", name) if tobj: qt = quoted_string(tobj["name"]) if tobj["num"] < 1: self.write("该标签下还没有文章") return page = int(self.get_argument("page", 1)) total_page = tobj["num"]/EACH_PAGE_POST_NUM if tobj["num"]%EACH_PAGE_POST_NUM: total_page += 1 if page > total_page: page = total_page self.redirect("/tag/%s?page=%d" % (qt, page)) return elif page < 1: page = 1 self.redirect("/tag/%s?page=%d" % (qt, page)) return from_i = EACH_PAGE_POST_NUM * (page-1) id_list = tobj["content"].split(",")[from_i:(from_i + EACH_PAGE_POST_NUM)] self.echo("tag_index.html", { "title": "Tag:%s - %s" % (tobj["name"], SITE_TITLE), "qt": qt, "tobj": tobj, "page": page, "total_page": total_page, "objs": self.db.query("SELECT id,title,add_time FROM oppy_post WHERE id in(%s) ORDER BY id DESC" % ",".join(id_list) ), "recent_posts": self.db.query("SELECT id,title FROM oppy_post ORDER BY id DESC LIMIT %d" % RECENT_POST_NUM ), "cats": self.db.query("SELECT id,name,num FROM oppy_category LIMIT %d" % SIDER_CAT_NUM), "tags": self.db.query("SELECT name,num FROM oppy_tag ORDER BY num DESC LIMIT %d" % SIDER_TAG_NUM), }) else: raise tornado.web.HTTPError(404)
def get(self, id, title): obj = self.db.get( "SELECT p.id,p.cid,p.views,p.title,p.html,p.tags,p.add_time,c.name as cname FROM oppy_post p LEFT JOIN oppy_category c ON p.cid=c.id WHERE p.id = %s", int(id)) if obj: qt = quoted_string(obj["title"]) if qt != title: self.redirect("/topic/%d/%s" % (int(id), qt)) return #nearly article table_status = self.db.query( "SHOW TABLE STATUS LIKE 'oppy_post'")[0] max_id = table_status["Auto_increment"] - 1 new_id = int(id) + 1 old_id = int(id) - 1 new_obj = old_obj = None if new_id <= max_id: new_obj = self.db.get( "SELECT id,title FROM oppy_post WHERE id = %s", new_id) if old_id > 0: old_obj = self.db.get( "SELECT id,title FROM oppy_post WHERE id = %s", old_id) #Related articles, base similar tag related_posts = None if RELATED_NUM > 0 and obj["tags"]: id_dic = {} for tag in obj["tags"].split(","): tag_obj = self.db.get( "SELECT num,content FROM oppy_tag WHERE name = %s LIMIT 1", tag) if tag_obj and tag_obj["num"] > 1: id_list = tag_obj["content"].split(",") id_list.remove(str(id)) for tid in id_list: try: id_dic[tid] += 1 except: id_dic[tid] = 1 ## sort if id_dic: id_tuple = sorted(id_dic.items(), key=lambda id_dic: id_dic[1], reverse=True)[:RELATED_NUM] id_list = [int(x[0]) for x in id_tuple] if len(id_list) == 1: related_posts = self.db.query( "SELECT id,title FROM oppy_post WHERE id = %s", int(id_list[0])) else: related_posts = self.db.query( "SELECT id,title FROM oppy_post WHERE id in(%s)" % ",".join([str(x) for x in id_list])) self.echo( "blog_detail.html", { "title": "%s - %s" % (obj["title"], SITE_TITLE), "description": "%s - %s" % (obj["cname"], get_des(obj["html"])), "keywords": obj["tags"], "qt": qt, "obj": obj, "user_id": self.get_secure_cookie("user"), "new_obj": new_obj, "old_obj": old_obj, "related_posts": related_posts, "recent_posts": self.db.query( "SELECT id,title FROM oppy_post ORDER BY id DESC LIMIT %d" % RECENT_POST_NUM), "cats": self.db.query( "SELECT id,name,num FROM oppy_category LIMIT %d" % SIDER_CAT_NUM), "tags": self.db.query( "SELECT name,num FROM oppy_tag ORDER BY num DESC LIMIT %d" % SIDER_TAG_NUM), }) self.db.execute( "UPDATE oppy_post SET views = views + 1 WHERE id = %s LIMIT 1", int(id)) else: raise tornado.web.HTTPError(404)
def post(self, id = ''): act = self.get_argument("act",'') if act == 'findid': eid = self.get_argument("id",'') self.redirect('%s/admin/edit_post/%s'% (BASE_URL, eid)) return self.set_header('Content-Type','application/json') rspd = {'status': 201, 'msg':'ok'} oldobj = Article.get_article_by_id_edit(id) try: tf = {'true':1,'false':0} timestamp = int(time()) post_dic = { 'category': self.get_argument("cat"), 'title': self.get_argument("tit"), 'content': self.get_argument("con"), 'tags': self.get_argument("tag",'').replace(u',',','), 'closecomment': self.get_argument("clo",'0'), 'password': self.get_argument("password",''), 'edit_time': timestamp, 'id': id } if post_dic['tags']: tagslist = set([x.strip() for x in post_dic['tags'].split(',')]) try: tagslist.remove('') except: pass if tagslist: post_dic['tags'] = ','.join(tagslist) post_dic['closecomment'] = tf[post_dic['closecomment'].lower()] except: rspd['status'] = 500 rspd['msg'] = '错误: 注意必填的三项' self.write(json.dumps(rspd)) return postid = Article.update_post_edit(post_dic) if postid: cache_key_list = ['/', 'post:%s'% id, 'cat:%s' % quoted_string(oldobj.category)] if oldobj.category != post_dic['category']: #cat changed Category.add_postid_to_cat(post_dic['category'], str(postid)) Category.remove_postid_from_cat(post_dic['category'], str(postid)) cache_key_list.append('cat:%s' % quoted_string(post_dic['category'])) if oldobj.tags != post_dic['tags']: #tag changed old_tags = set(oldobj.tags.split(',')) new_tags = set(post_dic['tags'].split(',')) removed_tags = old_tags - new_tags added_tags = new_tags - old_tags if added_tags: Tag.add_postid_to_tags(added_tags, str(postid)) if removed_tags: Tag.remove_postid_from_tags(removed_tags, str(postid)) clear_cache_by_pathlist(cache_key_list) rspd['status'] = 200 rspd['msg'] = '完成: 你已经成功编辑了一篇文章 <a href="/t/%s" target="_blank">查看编辑后的文章</a>' % str(postid) self.write(json.dumps(rspd)) return else: rspd['status'] = 500 rspd['msg'] = '错误: 未知错误,请尝试重新提交' self.write(json.dumps(rspd)) return
def get(self, id): obj = self.db.get("SELECT title FROM oppy_post WHERE id = %s", int(id)) if obj: self.redirect("/topic/%d/%s" % (int(id), quoted_string(obj["title"])), 301) else: raise tornado.web.HTTPError(404)
def post(self, id=""): act = self.get_argument("act", "") if act == "findid": eid = self.get_argument("id", "") self.redirect("%s/admin/edit_post/%s" % (BASE_URL, eid)) return self.set_header("Content-Type", "application/json") rspd = {"status": 201, "msg": "ok"} oldobj = Article.get_article_by_id_edit(id) try: tf = {"true": 1, "false": 0} timestamp = int(time()) post_dic = { "category": self.get_argument("cat"), "title": self.get_argument("tit"), "content": self.get_argument("con"), "tags": self.get_argument("tag", "").replace(u",", ","), "closecomment": self.get_argument("clo", "0"), "password": self.get_argument("password", ""), "edit_time": timestamp, "id": id, } if post_dic["tags"]: tagslist = set([x.strip() for x in post_dic["tags"].split(",")]) try: tagslist.remove("") except: pass if tagslist: post_dic["tags"] = ",".join(tagslist) post_dic["closecomment"] = tf[post_dic["closecomment"].lower()] except: rspd["status"] = 500 rspd["msg"] = "错误: 注意必填的三项" self.write(json.dumps(rspd)) return postid = Article.update_post_edit(post_dic) if postid: cache_key_list = ["/", "post:%s" % id, "cat:%s" % quoted_string(oldobj.category)] if oldobj.category != post_dic["category"]: # cat changed Category.add_postid_to_cat(post_dic["category"], str(postid)) Category.remove_postid_from_cat(post_dic["category"], str(postid)) cache_key_list.append("cat:%s" % quoted_string(post_dic["category"])) if oldobj.tags != post_dic["tags"]: # tag changed old_tags = set(oldobj.tags.split(",")) new_tags = set(post_dic["tags"].split(",")) removed_tags = old_tags - new_tags added_tags = new_tags - old_tags if added_tags: Tag.add_postid_to_tags(added_tags, str(postid)) if removed_tags: Tag.remove_postid_from_tags(removed_tags, str(postid)) clear_cache_by_pathlist(cache_key_list) rspd["status"] = 200 rspd["msg"] = '完成: 你已经成功编辑了一篇文章 <a href="/t/%s" target="_blank">查看编辑后的文章</a>' % str(postid) self.write(json.dumps(rspd)) return else: rspd["status"] = 500 rspd["msg"] = "错误: 未知错误,请尝试重新提交" self.write(json.dumps(rspd)) return