def _post_toggle(self): index = intval(self.get_body_argument('index', default=None)) type = self.get_body_argument('type', default=None) plugin = self.get_body_argument('plugin', default=None) toggle = bool(intval(self.get_body_argument('toggle', default=None))) config = self._read_config() # 验证数据 if plugin not in plugin_manager.plugins or type not in config['plugin_config'] \ or type not in plugin_manager.plugins[plugin]['type']: self._json('fail', '参数错误') # 开启 or 关闭 if toggle: if plugin in config['plugin_config'][type]: self._json('fail', '插件已开启') else: config['plugin_config'][type].insert(index, plugin) else: if plugin in config['plugin_config'][type]: config['plugin_config'][type].remove(plugin) else: self._json('fail', '插件已关闭') # 更新 if (yield self.update_plugin(config)): self._json('success', '更新成功') else: self._json('fail', '更新失败')
def post(self, *args, **kwargs): id = self.get_body_argument("id", default=None) if not id: self.custom_error("不存在这篇文章", "", id) post = yield self.db.article.find_one({"_id": ObjectId(id)}) self.__check_power(post) content = self.get_body_argument("ckeditor", default=None) post["title"] = self.get_body_argument("title", default=None) sort = self.get_body_argument("sort", default=None) post["charge"] = intval(self.get_body_argument("charge", default=0)) post["freebegin"] = intval( self.get_body_argument("freebegin", default=0)) post["freeend"] = intval(self.get_body_argument("freeend", default=0)) if not post["title"]: self.custom_error("标题不能为空", content, id) if post["charge"] < 0: self.custom_error("收费不能低于0", content, id) if post["freebegin"] > post["freeend"]: self.custom_error("结束时间不能小于开始时间", content, id) if not sort: self.custom_error("不存在这个分类", content, id) post["sort"] = yield self.db.sort.find_one({"_id": ObjectId(sort)}) if not post["sort"]: self.custom_error("不存在这个分类", content, id) # filter html post["content"] = xss_filter(content) model = ArticleModel() if not model(post): self.custom_error(model.error_msg, content, id) yield self.db.article.find_and_modify({"_id": post["_id"]}, post) self.redirect("/post/%s" % id)
def post(self, *args, **kwargs): id = self.get_body_argument("id", default=None) if not id: self.custom_error("不存在这篇文章", "", id) post = yield self.db.article.find_one({ "_id": ObjectId(id) }) self.__check_power(post) content = self.get_body_argument("ckeditor", default=None) post["title"] = self.get_body_argument("title", default=None) sort = self.get_body_argument("sort", default=None) post["charge"] = intval(self.get_body_argument("charge", default=0)) post["freebegin"] = intval(self.get_body_argument("freebegin", default=0)) post["freeend"] = intval(self.get_body_argument("freeend", default=0)) if post["charge"] < 0: self.custom_error("收费不能低于0", content, id) if post["freebegin"] > post["freeend"]: self.custom_error("结束时间不能小于开始时间", content, id) if not sort: self.custom_error("不存在这个分类", content, id) post["sort"] = yield self.db.sort.find_one({"_id": ObjectId(sort)}) if not post["sort"]: self.custom_error("不存在这个分类", content, id) # filter html post["content"] = xss_filter(content) model = ArticleModel() if not model(post): self.custom_error(model.error_msg, content, id) yield self.db.article.find_and_modify({ "_id": post["_id"] }, post) self.redirect("/post/%s" % id)
def post(self, *args, **kwargs): content = self.get_body_argument("ckeditor", default=None) title = self.get_body_argument("title", default=None) sort = self.get_body_argument("sort", default=None) charge = intval(self.get_body_argument("charge", default=0)) freebegin = intval(self.get_body_argument("freebegin", default=0)) freeend = intval(self.get_body_argument("freeend", default=0)) if not title: self.flash["article"] = content self.custom_error("标题不能为空哦", jump = "/publish") if charge < 0: self.flash["article"] = content self.custom_error("收费不能低于0", jump = "/publish") if freebegin > freeend: self.flash["article"] = content self.custom_error("结束时间不能小于开始时间", jump = "/publish") if not sort: self.flash["article"] = content self.custom_error("不存在这个分类", jump = "/publish") tosort = yield self.db.sort.find_and_modify({ "_id": ObjectId(sort) }, { "$inc": {"article": 1} }) if not tosort: self.flash["article"] = content self.custom_error("不存在这个分类", jump = "/publish") # filter html content = xss_filter(content) article = { "title": title, "content": content, "user": self.current_user["username"], "sort": tosort, "view": 0, "like": [], "unlike": [], "charge": charge, "time": time.time(), "freebegin": freebegin, "freeend": freeend, "buyer": [], "thanks": [], "star": False, "rank": 0, "comment": [], "open": False, "top": False, "lastcomment": time.time() } model = ArticleModel() if not model(article): self.flash["article"] = content self.custom_error(model.error_msg, jump = "/publish") id = yield self.db.article.insert(article) self.redirect("/post/%s" % id)
def post(self, *args, **kwargs): content = self.get_body_argument("ckeditor", default=None) title = self.get_body_argument("title", default=None) sort = self.get_body_argument("sort", default=None) charge = intval(self.get_body_argument("charge", default=0)) freebegin = intval(self.get_body_argument("freebegin", default=0)) freeend = intval(self.get_body_argument("freeend", default=0)) if not title: self.flash["article"] = content self.custom_error("标题不能为空哦", jump="/publish") if charge < 0: self.flash["article"] = content self.custom_error("收费不能低于0", jump="/publish") if freebegin > freeend: self.flash["article"] = content self.custom_error("结束时间不能小于开始时间", jump="/publish") if not sort: self.flash["article"] = content self.custom_error("不存在这个分类", jump="/publish") tosort = yield self.db.sort.find_and_modify({ "_id": ObjectId(sort) }, { "$inc": {"article": 1} }) if not tosort: self.flash["article"] = content self.custom_error("不存在这个分类", jump="/publish") # filter html content = xss_filter(content) article = { "title": title, "content": content, "user": self.current_user["username"], "sort": tosort, "view": 0, "like": [], "unlike": [], "charge": charge, "time": time.time(), "freebegin": freebegin, "freeend": freeend, "buyer": [], "thanks": [], "star": False, "rank": 0, "comment": [], "open": False, "top": False, "lastcomment": time.time() } model = ArticleModel() if not model(article): self.flash["article"] = content self.custom_error(model.error_msg, jump="/publish") id = yield self.db.article.insert(article) self.redirect("/post/%s" % id)
def _post_message(self): openwebsite = intval(self.get_body_argument("openwebsite", default=1)) openqq = intval(self.get_body_argument("openqq", default=1)) openemail = intval(self.get_body_argument("openemail", default=1)) allowemail = intval(self.get_body_argument("allowemail", default=1)) yield self.db.member.find_and_modify( {"username": self.current_user["username"]}, { "$set": { "openwebsite": openwebsite, "openqq": openqq, "openemail": openemail, "allowemail": allowemail } }) self.redirect("/user/edit")
def _view_invite(self, arg): where = self.get_query_argument("act", default=None) act = { "nouse": { "used": False }, "used": { "used": True }, "expire": { "time": { "$lt": time.time() - self.settings["invite_expire"] }, "used": False } } where = act.get(where) if (where in act) else {} limit = 15 page = intval(arg) page = page if page > 1 else 1 cursor = self.db.invite.find(where) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) invites = yield cursor.to_list(limit) self.render("invite.htm", invites=invites, count=count, each=limit, page=page)
def _post_message(self): openwebsite = intval(self.get_body_argument("openwebsite", default=1)) openqq = intval(self.get_body_argument("openqq", default=1)) openemail = intval(self.get_body_argument("openemail", default=1)) allowemail = intval(self.get_body_argument("allowemail", default=1)) yield self.db.member.find_and_modify({ "username": self.current_user["username"] }, { "$set": { "openwebsite": openwebsite, "openqq": openqq, "openemail": openemail, "allowemail": allowemail } }) self.redirect("/user/edit")
def get(self, *args, **kwargs): keyword = self.get_query_argument("keyword", default=None) if not keyword: self.custom_error("关键词不能为空") esp_keyword = re.escape(keyword) limit = 20 page = intval(args[1]) if not page or page <= 0: page = 1 cursor = self.db.article.find({ '$and': [{ "title": { "$regex": ".*%s.*" % esp_keyword, "$options": "i" } }, { '$or': [{ 'private': None }, { 'private': 'off' }] }] }) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) posts = yield cursor.to_list(length=limit) self.render("search.htm", posts=posts, page=page, keyword=keyword, time_span=time_span, count=count, each=limit)
def get(self, *args, **kwargs): limit = 15 page = intval(args[1]) if not page or page <= 0: page = 1 cursor = self.db.article.find( {'$or': [{ 'private': None }, { 'private': 'off' }]}) cursor.sort([('top', pymongo.DESCENDING), ("lastcomment", pymongo.DESCENDING), ('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) count = yield cursor.count() posts = yield cursor.to_list(length=limit) sorts = yield self.get_sort() self.render("main.htm", posts=filter( lambda post: post.get('private', 'off') == 'off', posts), sorts=sorts, page=page, time_span=time_span, count=count, each=limit)
def detail_page(self, arg): site = arg.split('/')[0] asin = arg.split('/')[1] limit = 20 page = intval(self.get_argument("page", default=1)) if not page or page <= 0: page = 1 product_cursor = self.db.follow_product.find({ "$and": [ {'username': self.get_current_user()['username']}, {'site': site}, {'asin': asin}, ]}) products = yield product_cursor.to_list(1) image = products[0]['image'] cursor = self.db.follow_monitor.find({ "$and": [ {'site': site}, {'asin': asin}, ]}) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) monitors = yield cursor.to_list(length=limit) for monitor in monitors: monitor['follows'] = json.loads(monitor['follows']) monitor['time'] = monitor['time'].strftime("%Y-%m-%d %H:%M:%S") self.render("amazon/follow_detail.htm", image=image, site=site, asin=asin, monitors=monitors, page=page, each=limit, count=count)
def _view_user(self, arg): username = self.get_query_argument("username", default=None) where = { "username": { "$regex": ".*" + re.escape(username) + ".*" } } if username else {} limit = 15 page = intval(arg) page = page if page > 1 else 1 user = self.db.member.find(where) count = yield user.count() user.tag([('time', pymongo.ASCENDING)]).limit(limit).skip( (page - 1) * limit) users = yield user.to_list(limit) if username: search = "?username=%s" % username else: search = "" self.render("userlist.html", page=page, users=users, count=count, each=limit, search=search)
def _view_games(self, arg): #查看所有游戏 limit = 15 page = intval(arg) page = page if page > 1 else 1 cursor = self.db.games.find() count = yield cursor.count() cursor.limit(limit).skip((page - 1) * limit) games = yield cursor.to_list(limit) self.render("games.htm", games = games, count = count, each = limit, page = page)
def _view_sort(self, arg): limit = 15 page = intval(arg) page = page if page > 1 else 1 cursor = self.db.sort.find() count = yield cursor.count() cursor.limit(limit).skip((page - 1) * limit) sorts = yield cursor.to_list(limit) self.render("sort.htm", sorts=sorts, count=count, each=limit, page=page)
def _view_tag(self, arg): limit = 15 page = intval(arg) page = page if page > 1 else 1 cursor = self.db.tag.find() count = yield cursor.count() cursor.limit(limit).skip((page - 1) * limit) tags = yield cursor.to_list(limit) self.render("tag.html", tags = tags, count = count, each = limit, page = page)
def _view_tag(self, arg): limit = 15 page = intval(arg) page = page if page > 1 else 1 cursor = self.db.tag.find() count = yield cursor.count() cursor.limit(limit).skip((page - 1) * limit) tags = yield cursor.to_list(limit) self.render("tag.html", tags=tags, count=count, each=limit, page=page)
def edituser_action(self, *args, **kwargs): id = self.get_body_argument("id") user = dict( money=intval(self.get_body_argument("money")), power=intval(self.get_body_argument("power")), email=self.get_body_argument("email"), website=self.get_body_argument("website"), qq=self.get_body_argument("qq"), address=self.get_body_argument("address"), signal=self.get_body_argument("signal"), ) model = UserModel() if not model(user): self.custom_error(model.error_msg) password = self.get_body_argument("password", default=None) if password: user["password"] = yield self.backend.submit(hash.get, password) user = yield self.db.member.find_and_modify({"_id": ObjectId(id)}, {"$set": user}) self.redirect("/manage/userdetail/%s" % user['username'])
def get(self, *args, **kwargs): limit = 15 page = intval(args[1]) if not page or page <= 0 : page = 1 cursor = self.db.article.find() cursor.sort([('top', pymongo.DESCENDING), ("lastcomment", pymongo.DESCENDING), ('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) count = yield cursor.count() posts = yield cursor.to_list(length = limit) sorts = yield self.get_sort() self.render("main.htm", posts = posts, sorts = sorts, page = page, time_span = time_span, count = count, each = limit)
def like_act(self, arg): limit = 10 page = intval(arg) if page <= 0 : page = 1 cursor = self.db.article.find({ "like": self.current_user["username"] }) count = yield cursor.count() cursor.tag([('_id', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) posts = yield cursor.to_list(length = limit) self.render("like.html", posts = posts, page = page, count = count, each = limit)
def get(self, *args, **kwargs): limit = 15 page = intval(args[1]) if not page or page <= 0 : page = 1 cursor = self.db.article.find({ "open": True }) cursor.sort([("top", pymongo.DESCENDING), ('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) count = yield cursor.count() posts = yield cursor.to_list(length = limit) self.render("open_list.htm", posts = posts, page = page, time_span = time_span, count = count, each = limit)
def newsort_action(self, *args, **kwargs): sort = dict( name = self.get_body_argument("name"), intro = self.get_body_argument("intro",default=None), show = True if intval(self.get_body_argument("show", default=None)) else False, article = 0 ) model = SortModel() if not model(sort): self.custom_error(model.error_msg) sort = yield self.db.sort.insert(sort) self.redirect("/manage/sort")
def editgame_action(self, *args, **kwargs): #修改一个已经存在的游戏 id = self.get_body_argument("id") game = dict( path=self.get_body_argument("path"), type=intval(self.get_body_argument("type")), play_type=intval(self.get_body_argument("play_type")), resource_type=intval(self.get_body_argument("resource_type")), question=self.get_body_argument("question"), answer1=self.get_body_argument("answer1"), answer2=self.get_body_argument("answer2"), answer3=self.get_body_argument("answer3"), answer4=self.get_body_argument("answer4"), right_answer=self.get_body_argument("right_answer"), switch=intval(self.get_body_argument("switch")), ) model = GameModel() if not model(game): self.custom_error(model.error_msg) game = yield self.db.games.find_and_modify({"_id": ObjectId(id)}, {"$set": game}) self.redirect("/manage/gamedetail/%s" % game['_id'])
def bookmark_act(self, arg): limit = 10 page = intval(arg) if page <= 0 : page = 1 user = yield self.db.member.find_one({ "username": self.current_user["username"] }) bookmark = user.get("bookmark") count = len(bookmark) bookmark = bookmark[(page - 1) * limit:(page - 1) * limit + limit] bookmark.reverse() self.render("bookmark.html", bookmark = bookmark, page = page, count = count, each = limit)
def newsort_action(self, *args, **kwargs): sort = dict( name=self.get_body_argument("name"), intro=self.get_body_argument("intro", default=None), show=True if intval(self.get_body_argument("show", default=None)) else False, article=0) model = SortModel() if not model(sort): self.custom_error(model.error_msg) sort = yield self.db.sort.insert(sort) self.redirect("/manage/sort")
def newgame_action(self, *args, **kwargs): #创建一个新的游戏 game = dict(name=self.get_body_argument("name"), type=intval(self.get_body_argument("type")), play_type=intval(self.get_body_argument("play_type")), resource_type=intval( self.get_body_argument("resource_type")), path=self.get_body_argument("path"), question=self.get_body_argument("question"), answer1=self.get_body_argument("answer1"), answer2=self.get_body_argument("answer2"), answer3=self.get_body_argument("answer3"), answer4=self.get_body_argument("answer4"), right_answer=self.get_body_argument("right_answer"), switch=intval(self.get_body_argument("switch")), plays=0, right_plays=0, wrong_plays=0) model = GameModel() if not model(game): self.custom_error(model.error_msg) sort = yield self.db.games.insert(game) self.redirect("/manage/games")
def detail_page(self, arg): site = arg.split('/')[0] asin = arg.split('/')[1] limit = 20 page = intval(self.get_argument("page", default=1)) if not page or page <= 0: page = 1 product_cursor = self.db.follow_product.find({ "$and": [ { 'username': self.get_current_user()['username'] }, { 'site': site }, { 'asin': asin }, ] }) products = yield product_cursor.to_list(1) image = products[0]['image'] cursor = self.db.follow_monitor.find( {"$and": [ { 'site': site }, { 'asin': asin }, ]}) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) monitors = yield cursor.to_list(length=limit) for monitor in monitors: monitor['follows'] = json.loads(monitor['follows']) monitor['time'] = monitor['time'].strftime("%Y-%m-%d %H:%M:%S") self.render("amazon/follow_detail.htm", image=image, site=site, asin=asin, monitors=monitors, page=page, each=limit, count=count)
def edituser_action(self, *args, **kwargs): id = self.get_body_argument("id") user = dict( money = intval(self.get_body_argument("money")), power = intval(self.get_body_argument("power")), email = self.get_body_argument("email"), website = self.get_body_argument("website"), qq = self.get_body_argument("qq"), address = self.get_body_argument("address"), signal = self.get_body_argument("signal"), ) model = UserModel() if not model(user): self.custom_error(model.error_msg) password = self.get_body_argument("password", default=None) if password: user["password"] = yield self.backend.submit(hash.get, password) user = yield self.db.member.find_and_modify({ "_id": ObjectId(id) }, { "$set": user }) self.redirect("/manage/userdetail/%s" % user['username'])
def get(self, *args, **kwargs): limit = 20 page = intval(args[1]) if not page or page <= 0 : page = 1 cursor = self.db.message.find({ "$or": [ {"to": self.current_user["username"]}, {"from": self.current_user["username"]} ] }) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) messages = yield cursor.to_list(length = limit) self.render("message.htm", messages = messages, count = count, cutstr = cutstr)
def get(self, *args, **kwargs): sortid = args[0] limit = 15 page = intval(args[2]) if not page or page <= 0: page = 1 sort = yield self.db.sort.find_one({"_id": ObjectId(sortid)}) if not sort: self.custom_error("板块不存在") cursor = self.db.article.find({"sort._id": ObjectId(sortid)}) count = yield cursor.count() cursor.sort([("time", pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) posts = yield cursor.to_list(length=limit) self.render("sort.htm", posts=posts, page=page, sort=sort, time_span=time_span, count=count, each=limit)
def newgame_action(self, *args, **kwargs):#创建一个新的游戏 game = dict( name = self.get_body_argument("name"), type = intval(self.get_body_argument("type")), play_type = intval(self.get_body_argument("play_type")), resource_type = intval(self.get_body_argument("resource_type")), path = self.get_body_argument("path"), question = self.get_body_argument("question"), answer1 = self.get_body_argument("answer1"), answer2 = self.get_body_argument("answer2"), answer3 = self.get_body_argument("answer3"), answer4 = self.get_body_argument("answer4"), right_answer = self.get_body_argument("right_answer"), switch = intval(self.get_body_argument("switch")), plays = 0, right_plays = 0, wrong_plays = 0 ) model = GameModel() if not model(game): self.custom_error(model.error_msg) sort = yield self.db.games.insert(game) self.redirect("/manage/games")
def like_act(self, arg): limit = 10 page = intval(arg) if page <= 0: page = 1 cursor = self.db.article.find({"like": self.current_user["username"]}) count = yield cursor.count() cursor.sort([('_id', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) posts = yield cursor.to_list(length=limit) self.render("like.htm", posts=posts, page=page, count=count, each=limit)
def get(self, *args, **kwargs): limit = 15 page = intval(args[1]) if not page or page <= 0: page = 1 cursor = self.db.article.find({'$or': [{'private': None}, {'private': 'off'}]}) cursor.sort( [('top', pymongo.DESCENDING), ("lastcomment", pymongo.DESCENDING), ('time', pymongo.DESCENDING)]).limit( limit).skip((page - 1) * limit) count = yield cursor.count() posts = yield cursor.to_list(length=limit) sorts = yield self.get_sort() self.render("main.htm", posts=filter(lambda post: post.get('private', 'off') == 'off', posts), sorts=sorts, page=page, time_span=time_span, count=count, each=limit)
def get(self, *args, **kwargs): limit = 15 try: page = intval(args[2]) if page <= 0: page = 1 except: page = 1 cursor = self.db.tag.find() count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) tags = yield cursor.to_list(length=limit) self.write(dict(tags=tags, page=page, count=count, each=limit))
def _view_user(self, arg): username = self.get_query_argument("username", default=None) where = {"username": {"$regex": ".*"+re.escape(username)+".*"}} if username else {} limit = 15 page = intval(arg) page = page if page > 1 else 1 user = self.db.member.find(where) count = yield user.count() user.tag([('time', pymongo.ASCENDING)]).limit(limit).skip((page - 1) * limit) users = yield user.to_list(limit) if username: search = "?username=%s" % username else: search = "" self.render("userlist.html", page = page, users = users, count = count, each = limit, search = search)
def bookmark_act(self, arg): limit = 10 page = intval(arg) if page <= 0: page = 1 user = yield self.db.member.find_one( {"username": self.current_user["username"]}) bookmark = user.get("bookmark") count = len(bookmark) bookmark = bookmark[(page - 1) * limit:(page - 1) * limit + limit] bookmark.reverse() self.render("bookmark.htm", bookmark=bookmark, page=page, count=count, each=limit)
def editgame_action(self, *args, **kwargs): #修改一个已经存在的游戏 id = self.get_body_argument("id") game = dict( path = self.get_body_argument("path"), type = intval(self.get_body_argument("type")), play_type = intval(self.get_body_argument("play_type")), resource_type = intval(self.get_body_argument("resource_type")), question = self.get_body_argument("question"), answer1 = self.get_body_argument("answer1"), answer2 = self.get_body_argument("answer2"), answer3 = self.get_body_argument("answer3"), answer4 = self.get_body_argument("answer4"), right_answer = self.get_body_argument("right_answer"), switch = intval(self.get_body_argument("switch")), ) model = GameModel() if not model(game): self.custom_error(model.error_msg) game = yield self.db.games.find_and_modify({ "_id": ObjectId(id) }, { "$set": game }) self.redirect("/manage/gamedetail/%s" % game['_id'])
def sort_action(self, *args, **kwargs): id = self.get_body_argument("id") sort = dict( name=self.get_body_argument("name"), intro=self.get_body_argument("intro", default=None), show=True if intval(self.get_body_argument("show", default=None)) else False) model = SortModel() if not model(sort): self.custom_error(model.error_msg) sort = yield self.db.sort.find_and_modify({"_id": ObjectId(id)}, {"$set": sort}) if not sort: self.custom_error("不存在这个板块") else: self.redirect("/manage/sortdetail/%s" % id)
def get(self, *args, **kwargs): keyword = self.get_query_argument("keyword", default=None) if not keyword: self.custom_error("关键词不能为空") esp_keyword = re.escape(keyword) limit = 20 page = intval(args[1]) if not page or page <= 0 : page = 1 cursor = self.db.article.find({ "title": {"$regex": ".*%s.*" % esp_keyword, "$options": "i"} }) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) posts = yield cursor.to_list(length = limit) self.render("search.htm", posts = posts, page = page, keyword = keyword, time_span = time_span, count = count, each = limit)
def _view_invite(self, arg): where = self.get_query_argument("act", default=None) act = { "nouse": {"used": False}, "used": {"used": True}, "expire": {"time": {"$lt": time.time() - self.settings["invite_expire"]}, "used": False}, } where = act.get(where) if (where in act) else {} limit = 15 page = intval(arg) page = page if page > 1 else 1 cursor = self.db.invite.find(where) count = yield cursor.count() cursor.sort([("time", pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) invites = yield cursor.to_list(limit) self.render("invite.htm", invites=invites, count=count, each=limit, page=page)
def get(self, *args, **kwargs): limit = 15 try: page = intval(args[1]) if page <= 0 : page = 1 except: page = 1 cursor = self.db.article.find() cursor.sort([('top', pymongo.DESCENDING), ("lastcomment", pymongo.DESCENDING), ('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) count = yield cursor.count() posts = yield cursor.to_list(length = limit) tags = yield self.get_tag() self.write(dict(posts = posts, tags = tags, page = page, count = count, each = limit))
def setting_action(self, *args, **kwargs): config = self._read_config() config["global"]["site"] = dict( webname = self.get_body_argument("webname"), keyword = self.get_body_argument("keyword"), description = self.get_body_argument("description") ) config["global"]["init_money"] = intval(self.get_body_argument("init_money")) config["global"]["register"] = self.get_body_argument("register") if config["global"]["register"] not in ("open", "invite", "close"): self.custom_error("注册方法不正确") captcha = self.get_body_arguments("captcha") for d in ("register", "login", "comment"): config["global"]["captcha"][d] = True if (d in captcha) else False key = self.get_body_argument("key", default=None) if key: config["global"]["cookie_secret"] = key self._write_config(config) self.redirect("/manage/setting")
def sort_action(self, *args, **kwargs): id = self.get_body_argument("id") sort = dict( name = self.get_body_argument("name"), intro = self.get_body_argument("intro",default=None), show = True if intval(self.get_body_argument("show", default=None)) else False ) model = SortModel() if not model(sort): self.custom_error(model.error_msg) sort = yield self.db.sort.find_and_modify({ "_id": ObjectId(id) }, { "$set": sort }) if not sort: self.custom_error("不存在这个板块") else: self.redirect("/manage/sortdetail/%s" % id)
def setting_action(self, *args, **kwargs): config = self._read_config() config["global"]["site"] = dict( webname=self.get_body_argument("webname"), keyword=self.get_body_argument("keyword"), description=self.get_body_argument("description")) config["global"]["init_money"] = intval( self.get_body_argument("init_money")) config["global"]["register"] = self.get_body_argument("register") if config["global"]["register"] not in ("open", "invite", "close"): self.custom_error("注册方法不正确") captcha = self.get_body_arguments("captcha") for d in ("register", "login", "comment"): config["global"]["captcha"][d] = True if (d in captcha) else False key = self.get_body_argument("key", default=None) if key: config["global"]["cookie_secret"] = key self._write_config(config) self.redirect("/manage/setting")
def get(self, *args, **kwargs): limit = 15 try: page = intval(args[1]) if page <= 0: page = 1 except: page = 1 cursor = self.db.article.find() cursor.sort([('top', pymongo.DESCENDING), ("lastcomment", pymongo.DESCENDING), ('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) count = yield cursor.count() posts = yield cursor.to_list(length=limit) tags = yield self.get_tag() self.write( dict(posts=posts, tags=tags, page=page, count=count, each=limit))
def get(self, *args, **kwargs): sortid = args[0] limit = 15 page = intval(args[2]) if not page or page <= 0: page = 1 sort = yield self.db.sort.find_one({"_id": ObjectId(sortid)}) if not sort: self.custom_error("板块不存在") cursor = self.db.article.find({"sort._id": ObjectId(sortid)}) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) posts = yield cursor.to_list(length=limit) self.render("sort.htm", posts=posts, page=page, sort=sort, time_span=time_span, count=count, each=limit)
def detail_act(self, arg): if not arg : arg = self.current_user["username"] username = self.get_query_argument("u", default = arg) user = yield self.db.member.find_one({ "username": username }) if not user: self.custom_error("不存在这个用户") limit = 10 page = intval(self.get_argument("page", default=1)) if not page or page <= 0 : page = 1 cursor = self.db.article.find({ "user": username }) count = yield cursor.count() cursor.tag([('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) posts = yield cursor.to_list(length = limit) face = "./static/face/%s/180.png" % user["_id"] if not os.path.exists(face): face = "./static/face/guest.png" self.render("user.html", user = user, posts = posts, page = page, time_span = time_span, each = limit, count = count)
def post(self, *args, **kwargs): self.func = intval(self.get_argument("CKEditorFuncNum")) now = time.time() try: if self.request.files: file = self.request.files['upload'][0] ext = os.path.splitext(file["filename"])[-1] if ext not in (".png", ".gif", ".jpg", ".bmp", ".jpeg"): self.end("", u"不允许上传此类后缀的文件哦") self.orgname = file["filename"] filename = md5("%s%s" % (file["filename"], random_str(6))) + ext folder = "%s/%s/%s" % (self.settings["imagepath"], humantime(now, "%Y%m"), humantime(now, "%d")) if not os.path.isdir(folder): os.makedirs(folder) filename = "%s/%s" % (folder, filename) with open(filename, "wb") as fin: fin.write(file["body"]) fin.close() self.end(filename, u"上传成功") except tornado.web.Finish, e: pass
def _view_userlist(self, arg): if arg not in ('all', 'subscribe', 'unsubscribe'): arg = 'all' options = { 'all': {}, 'subscribe': {'subscribe': True}, 'unsubscribe': {'subscribe': False} } page = intval(self.get_argument('page', default=1)) if not page or page <= 0: page = 1 limit = 10 cursor = self.db.wechat_user.find(options[arg]) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip((page - 1) * limit) userlist = yield cursor.to_list(limit) if userlist: w_userlist = self.wechat.user.get_user_list([u['wechatid'] for u in userlist]) for i in range(len(userlist)): userlist[i].update(w_userlist[i]) sex = { 0: '未知', 1: '男', 2: '女' } self.render('user-list.html', userlist=userlist, item=arg, sex=sex, page=page, each=limit, count=count)
def detail_act(self, arg): if not arg: arg = self.current_user["username"] username = self.get_query_argument("u", default=arg) user = yield self.db.member.find_one({"username": username}) if not user: self.custom_error("不存在这个用户") limit = 10 page = intval(self.get_argument("page", default=1)) if not page or page <= 0: page = 1 cursor = self.db.article.find({"user": username}) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) posts = yield cursor.to_list(length=limit) face = "./static/face/%s/180.png" % user["_id"] if not os.path.exists(face): face = "./static/face/guest.png" self.render("user.htm", user=user, posts=posts, page=page, time_span=time_span, each=limit, count=count)
def get(self, *args, **kwargs): tagid = args[0] limit = 15 try: page = intval(args[2]) if page <= 0: page = 1 except: page = 1 tag = yield self.db.tag.find_one({"_id": ObjectId(tagid)}) if not tag: self.custom_error("标签不存在") cursor = self.db.article.find({"tag._id": ObjectId(tagid)}) count = yield cursor.count() cursor.sort([('time', pymongo.DESCENDING)]).limit(limit).skip( (page - 1) * limit) posts = yield cursor.to_list(length=limit) self.render("tag.html", posts=posts, page=page, tag=tag, count=count, each=limit)
def article_action(self, *args, **kwargs): method = self.get_body_argument("method", default="") id = self.get_body_argument("id", default=None) if method in ("star", "unstar"): star = True if method == "star" else False post = yield self.db.article.find_and_modify({ "_id": ObjectId(id) }, { "$set": { "star": star } }) content = u"你的文章《%s》被管理员" % post["title"] + (u"加精" if star else u"取消精华") + u"了" yield self.message(fromuser=None, touser=post["user"], content=content, jump="/post/%s" % id) elif method in ("open", "close"): open = True if method == "open" else False post = yield self.db.article.find_and_modify({ "_id": ObjectId(id) }, { "$set": { "open": open } }) yield self.message(fromuser=None, touser=post["user"], jump="/post/%s" % id, content=u"你的文章《%s》被管理员%s了" % (post["title"], u"公开" if open else u"取消公开")) elif method in ("top", "notop"): top = True if method == "top" else False post = yield self.db.article.find_and_modify({ "_id": ObjectId(id) }, { "$set": { "top": top } }) yield self.message(fromuser=None, touser=post["user"], jump="/post/%s" % id, content=u"你的文章《%s》被管理员%s了" % (post["title"], u"置顶" if top else u"取消置顶")) elif method == "del": post = yield self.db.article.find_and_modify({ "_id": ObjectId(id) }, remove = True) if not post: self.custom_error("不存在这篇文章", jump="/") yield self.db.member.update({ }, { "$pull": { "bookmark": {"id": id} } }, multi = True) yield self.message(fromuser=None, touser=post["user"], jump="/post/%s" % id, content=u"你的文章《%s》被管理员删除了" % post["title"]) self.redirect("/") elif method == "rank": rank = intval(self.get_body_argument("rank")) post = yield self.db.article.find_one({ "_id": ObjectId(id) }) if not post: self.custom_error("不存在这篇文章") if "rank" in post and post.get("rank") != 0: self.custom_error("已经评分过啦") if not (-10 <= rank <= 10): self.custom_error("评分超出范围拉") yield self.db.article.find_and_modify({ "_id": ObjectId(id) }, { "$set": {"rank": rank} }) yield self.message(fromuser=None, touser=post["user"], content=u"你的文章《%s》被管理员" % post["title"] + (u"奖励" if rank > 0 else u"扣除") + u"%d金币" % abs(rank), jump="/post/%s" % id) self.redirect("/post/%s" % id)
def post(self, *args, **kwargs): content = self.get_body_argument("ckeditor", default=None) title = self.get_body_argument("title", default=None) sort = self.get_body_argument("sort", default=None) charge = intval(self.get_body_argument("charge", default=0)) freebegin = intval(self.get_body_argument("freebegin", default=0)) freeend = intval(self.get_body_argument("freeend", default=0)) private = self.get_body_argument('private', default='off') if not title: self.flash["article"] = content self.custom_error("标题不能为空哦", jump="/publish") if charge < 0: self.flash["article"] = content self.custom_error("收费不能低于0", jump="/publish") if freebegin > freeend: self.flash["article"] = content self.custom_error("结束时间不能小于开始时间", jump="/publish") if not sort: self.flash["article"] = content self.custom_error("不存在这个分类", jump="/publish") tosort = yield self.db.sort.find_and_modify({ "_id": ObjectId(sort) }, { "$inc": {"article": 1} }) if not tosort: self.flash["article"] = content self.custom_error("不存在这个分类", jump="/publish") # filter html content = xss_filter(content) # attach file attach = [] fs = motor.motor_tornado.MotorGridFS(self.db) for file in self.request.files.get('file', []): fs_id = yield fs.put(file['body'], filename=file['filename']) attach.append(fs_id) article = { "title": title, "content": content, "user": self.current_user["username"], "sort": tosort, "view": 0, "like": [], "unlike": [], "charge": charge, "time": time.time(), "freebegin": freebegin, "freeend": freeend, "buyer": [], "thanks": [], "star": False, "rank": 0, "comment": [], "open": False, "top": False, "lastcomment": time.time(), 'attach': attach, 'private': private, } model = ArticleModel() if not model(article): self.flash["article"] = content self.custom_error(model.error_msg, jump="/publish") id = yield self.db.article.insert(article) # send mail users = self.db.member.find() article_url = '{}/post/{}'.format(tornado.options.options.url, id) content = "{}<br><br>{}".format('''<a href="{}" target="_blank">点击查看论坛文章</a>'''.format(article_url), content) while (yield users.fetch_next): user = users.next_object() if user.get('power') >= 0 and self.settings["email"]["method"] == "mailgun" and "email" in user and user.get("allowemail"): Sendemail(self.settings.get("email")).send( title=u"论坛文章:《{}》,作者:{}".format(title, self.current_user["username"]), content=content, to=user["email"] ) self.redirect("/post/%s" % id)
def article_action(self, *args, **kwargs): method = self.get_body_argument("method", default="") id = self.get_body_argument("id", default=None) if method in ("star", "unstar"): star = True if method == "star" else False post = yield self.db.article.find_and_modify( {"_id": ObjectId(id)}, {"$set": { "star": star }}) content = u"你的文章《%s》被管理员" % post["title"] + (u"加精" if star else u"取消精华") + u"了" yield self.message(fromuser=None, touser=post["user"], content=content, jump="/post/%s" % id) elif method in ("open", "close"): open = True if method == "open" else False post = yield self.db.article.find_and_modify( {"_id": ObjectId(id)}, {"$set": { "open": open }}) yield self.message(fromuser=None, touser=post["user"], jump="/post/%s" % id, content=u"你的文章《%s》被管理员%s了" % (post["title"], u"公开" if open else u"取消公开")) elif method in ("top", "notop"): top = True if method == "top" else False post = yield self.db.article.find_and_modify( {"_id": ObjectId(id)}, {"$set": { "top": top }}) yield self.message(fromuser=None, touser=post["user"], jump="/post/%s" % id, content=u"你的文章《%s》被管理员%s了" % (post["title"], u"置顶" if top else u"取消置顶")) elif method == "del": post = yield self.db.article.find_and_modify({"_id": ObjectId(id)}, remove=True) if not post: self.custom_error("不存在这篇文章", jump="/") yield self.db.member.update({}, {"$pull": { "bookmark": { "id": id } }}, multi=True) yield self.message(fromuser=None, touser=post["user"], jump="/post/%s" % id, content=u"你的文章《%s》被管理员删除了" % post["title"]) self.redirect("/") elif method == "rank": rank = intval(self.get_body_argument("rank")) post = yield self.db.article.find_one({"_id": ObjectId(id)}) if not post: self.custom_error("不存在这篇文章") if "rank" in post and post.get("rank") != 0: self.custom_error("已经评分过啦") if not (-10 <= rank <= 10): self.custom_error("评分超出范围拉") yield self.db.article.find_and_modify({"_id": ObjectId(id)}, {"$set": { "rank": rank }}) yield self.message(fromuser=None, touser=post["user"], content=u"你的文章《%s》被管理员" % post["title"] + (u"奖励" if rank > 0 else u"扣除") + u"%d金币" % abs(rank), jump="/post/%s" % id) self.redirect("/post/%s" % id)