示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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
示例#4
0
文件: views.py 项目: kkkier/ijd8
    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)
示例#5
0
    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
示例#6
0
    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
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
文件: views.py 项目: kkkier/ijd8
    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)
示例#10
0
 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            
示例#11
0
 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)
示例#12
0
    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
示例#13
0
    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