async def get(self, *args, **kwargs): """ 获取评论下的回复列表 :param args: :param kwargs: :return: """ res_data = [] comment_id = self.get_argument("comment_id", None) per_page = self.get_argument("per_page", 10) page = self.get_argument("page", 1) per_page = get_int_or_none(per_page) page = get_int_or_none(page) if not all([page, per_page]): self.set_status(400) res_data["content"] = "page 或者 per_page参数不合法" try: comment_obj = await self.application.objects.get( Comment, id=get_int_or_none(comment_id)) reply_query = Reply.select().where(Reply.comment == comment_obj) reply_query = reply_query.limit(per_page).offset( (page - 1) * per_page) reply_objs = await self.application.objects.execute(reply_query) for reply_obj in reply_objs: reply_dict = {} reply_dict["id"] = reply_obj.id reply_dict["user_id"] = reply_obj.user_id reply_dict["content"] = reply_obj.content res_data.append(reply_dict) except Exception: self.set_status(400) res_data["content"] = "评论不存在" self.finish(json.dumps(res_data))
async def get(self, *args, **kwargs): """ 获取帖子下的评论列表 :param args: :param kwargs: :return: """ res_data = [] post_id = self.get_argument("post_id", None) per_page = self.get_argument("per_page", 10) page = self.get_argument("page", 1) per_page = get_int_or_none(per_page) page = get_int_or_none(page) if not all([page, per_page]): self.set_status(400) self.write("page 或者 per_page参数不合法") try: post_obj = await self.application.objects.get( CommunityPost, id=get_int_or_none(post_id)) comment_query = Comment.select().where(Comment.post == post_obj) comment_query = comment_query.limit(per_page).offset( (page - 1) * per_page) comment_objs = await self.application.objects.execute(comment_query ) for comment_obj in comment_objs: comment_dict = {} comment_dict["id"] = comment_obj.id comment_dict["user_id"] = comment_obj.user_id comment_dict["content"] = comment_obj.content res_data.append(comment_dict) except Exception: self.set_status(400) self.write("帖子不存在") self.finish(json.dumps(res_data))
async def get(self, *args, **kwargs): """ 获取帖子列表、搜索 :param args: :param kwargs: :return: """ res_data = [] group_id = self.get_argument("group_id", None) try: group = await self.application.objects.get( CommunityGroup, id=get_int_or_none(group_id)) await self.application.objects.get(CommunityGroupMember, user=self.current_user, group=group, status=1) except Exception: self.set_status(400) self.write("小组不存在或用户未成功加入小组") posts_query = CommunityPost.select() hot = self.get_argument("hot", None) if hot: posts_query = posts_query.filter(CommunityPost.is_hot == True) cream = self.get_argument("cream", None) if cream: posts_query = posts_query.filter(CommunityPost.is_cream == True) per_page = self.get_argument("per_page", 10) page = self.get_argument("page", 1) per_page = get_int_or_none(per_page) page = get_int_or_none(page) if not all([page, per_page]): self.set_status(400) self.write("page 或者 per_page参数不合法") posts_query = posts_query.limit(per_page).offset((page - 1) * per_page) post_objs = await self.application.objects.execute(posts_query) for post_obj in post_objs: post_dict = {} post_dict["id"] = post_obj.id post_dict["user_id"] = post_obj.user_id post_dict["title"] = post_obj.title post_dict["content"] = post_obj.content res_data.append(post_dict) self.finish(json.dumps(res_data))
async def get(self, *args, **kwargs): """ 根据group id 获取小组详情 :param args: :param kwargs: :return: """ res_data = {} group_id = get_int_or_none(self.get_argument("group_id", None)) if not group_id: self.set_status(400) self.write({"content": "缺少group_id参数"}) try: group_obj = await self.application.objects.get(CommunityGroup, id=group_id) res_data["id"] = group_id res_data["name"] = group_obj.name res_data["description"] = group_obj.description res_data["notice"] = group_obj.notice res_data["member_nums"] = group_obj.member_nums res_data["post_nums"] = group_obj.post_nums res_data["front_image"] = "{}/media/{}/".format( self.settings["SITE_URL"], group_obj.front_image) self.write(res_data) except CommunityGroup.DoesNotExist: self.set_status(400) self.write({"content": "group 不存在"})
async def post(self, *args, **kwargs): res_data = {} req_data = json.loads(self.request.body.decode("utf8")) group_id = get_int_or_none(req_data.get("group_id")) group = None if not group_id: self.set_status(400) self.write("缺少group_id参数") else: try: group = await self.application.objects.get(CommunityGroup, id=group_id) await self.application.objects.get(CommunityGroupMember, user=self.current_user, status=1) except Exception: self.set_status(400) self.write("group_id不存在或该成员未加入小组") post_form = PostForm.from_json(req_data) if post_form.validate(): post_obj = await self.application.objects.create( CommunityPost, user=self.current_user, title=post_form.title.data, content=post_form.content.data, group=group) res_data["id"] = post_obj.id else: res_data = post_form.errors self.finish(res_data)
async def post(self, *args, **kwargs): """ 申请加入小组 :param args: :param kwargs: :return: """ res_data = {} req_data = self.request.body.decode("utf8") req_data = json.loads(req_data) group_id = get_int_or_none(req_data.get("group_id")) group_member_form = GroupMemberForm.from_json(req_data) if group_member_form.validate(): try: await self.application.objects.get(CommunityGroup, id=group_id) await self.application.objects.get(CommunityGroupMember, user=self.current_user, group=group_id) self.set_status(400) res_data["content"] = "请勿重复申请" except CommunityGroup.DoesNotExist: self.set_status(404) except CommunityGroupMember.DoesNotExist: group_member_obj = await self.application.objects.create( CommunityGroupMember, user=self.current_user, group=group_id, apply_reason=group_member_form.apply_reason.data) res_data["id"] = group_member_obj.id res_data["content"] = "申请成功,等待审核" else: self.set_status(400) res_data = group_member_form.errors self.finish(res_data)
async def get(self, answer_id, *args, **kwargs): """ 通过回复的答案ID获取其评论信息 :param answer_id: :param args: :param kwargs: :return: """ res_data = [] answer_replys = await self.application.objects.execute( Answer.extend().where( Answer.parent_answer == get_int_or_none(answer_id))) for item in answer_replys: item_dict = { "user": model_to_dict(item.user), "content": item.content, "reply_nums": item.reply_nums, "add_time": item.add_time.strftime("%Y-%m-%d"), "id": item.id } res_data.append(item_dict) self.write(json.dumps(res_data))
async def post(self, question_id, *args, **kwargs): # 新增评论 res_data = {} param = self.request.body.decode("utf8") param = json.loads(param) form = AnswerForm.from_json(param) if form.validate(): try: question_obj = await self.application.objects.get( Question, id=get_int_or_none(question_id)) answer_obj = await self.application.objects.create( Answer, user=self.current_user, question=question_obj, content=form.content.data) question_obj.answer_nums += 1 await self.application.objects.update(question_obj) res_data["id"] = answer_obj.id res_data["user"] = { "nick_name": self.current_user.nick_name, "id": self.current_user.id } except Question.DoesNotExist as e: self.set_status(404) else: self.set_status(400) for field in form.errors: res_data[field] = form.errors[field][0] self.finish(res_data)
async def get(self, question_id, *args, **kwargs): """ 获取某个问题的所有回答 :param question_id: :param args: :param kwargs: :return: """ res_data = [] try: question_obj = await self.application.objects.get( Question, id=get_int_or_none(question_id)) answer_objs = await self.application.objects.execute( Answer.extend().where( Answer.question == question_obj, Answer.parent_answer.is_null(True)).order_by( Answer.create_time.desc())) for item in answer_objs: item_dict = { "user": model_to_dict(item.user), "content": item.content, "reply_nums": item.reply_nums, "id": item.id, } res_data.append(item_dict) except Question.DoesNotExist as e: self.set_status(404) self.write(json.dumps(res_data))
async def get(self, *args, **kwargs): """ 获取小组列表、搜索 :param args: :param kwargs: :return: """ res_data = [] community_query = CommunityGroup.extend() # 根据类别进行过滤 category = self.get_argument("category", None) if category: community_query = community_query.filter( CommunityGroup.category == category) # 根据参数进行排序 order = self.get_argument("o", None) if order: if order == "new": community_query = community_query.order_by( CommunityGroup.create_time.desc()) elif order == "hot": community_query = community_query.order_by( CommunityGroup.member_nums.desc()) per_page = self.get_argument("per_page", 10) page = self.get_argument("page", 1) per_page = get_int_or_none(per_page) page = get_int_or_none(page) if not all([page, per_page]): self.set_status(400) self.write("page 或者 per_page参数不合法") community_query = community_query.limit(per_page).offset( (page - 1) * per_page) group_objs = await self.application.objects.execute(community_query) for group_obj in group_objs: group_dict = model_to_dict(group_obj) group_dict["front_image"] = "{}/media/{}/".format( self.settings["SITE_URL"], group_dict["front_image"]) res_data.append(group_dict) self.finish(json.dumps(res_data))
async def get(self, *args, **kwargs): """ 获取小组帖子详情 :param args: :param kwargs: :return: """ res_data = {} group_id = get_int_or_none(self.get_argument("group_id", None)) if not group_id: self.set_status(400) self.write({"content": "缺少group_id参数"}) try: group_obj = await self.application.objects.get(CommunityGroup, id=group_id) await self.application.objects.get(CommunityGroupMember, group=group_obj, user=self.current_user) except Exception: self.set_status(400) self.write({"content": "group 不存在或用户尚未加入该小组"}) post_id = get_int_or_none(self.get_argument("id", None)) if not post_id: self.set_status(400) self.write("缺少id参数") try: post_obj = await self.application.objects.get(CommunityPost, id=post_id) res_data["id"] = post_id res_data["title"] = post_obj.title res_data["content"] = post_obj.content res_data["is_hot"] = post_obj.is_hot res_data["is_cream"] = post_obj.is_cream except CommunityPost.DoesNotExist: self.set_status(400) res_data["content"] = "帖子不存在" self.finish(res_data)
async def post(self, answer_id, *args, **kwargs): """ 添加回复 :param answer_id: :param args: :param kwargs: :return: """ res_data = {} param = self.request.body.decode("utf8") param = json.loads(param) form = AnswerReplyForm.from_json(param) if form.validate(): try: answer = await self.application.objects.get( Answer, id=get_int_or_none(answer_id)) replyed_user = await self.application.objects.get( User, id=form.replyed_user.data) reply = await self.application.objects.create( Answer, user=self.current_user, parent_answer=answer, reply_user=replyed_user, content=form.content.data) # 修改comment的回复数 answer.reply_nums += 1 await self.application.objects.update(answer) res_data["id"] = reply.id res_data["user"] = { "id": self.current_user.id, "nick_name": self.current_user.nick_name } except Answer.DoesNotExist as e: self.set_status(404) except User.DoesNotExist as e: self.set_status(400) res_data["replyed_user"] = "******" else: self.set_status(400) for field in form.errors: res_data[field] = form.errors[field][0] self.write(res_data)
async def get(self, *args, **kwargs): """ 通过订单生成支付链接 :param args: :param kwargs: :return: """ res_data = {} order_id = get_int_or_none(self.get_argument("id", None)) if not order_id: self.set_status(400) self.write({"content": "缺少order_id参数"}) try: order_obj = await self.application.objects.get( OrderInfo, id=order_id, pay_status=OrderInfo.ORDER_STATUS[4][0] ) out_trade_no = order_obj.order_sn order_mount = order_obj.order_mount subject = order_obj.post_script alipay = AliPay( appid=settings["ALI_APPID"], app_notify_url="{}/alipay/return/".format(settings["SITE_URL"]), app_private_key_path=settings["private_key_path"], alipay_public_key_path=settings["ali_pub_key_path"], debug=True, return_url="{}/alipay/return/".format(settings["SITE_URL"]) ) url = alipay.direct_pay( subject=subject, out_trade_no=out_trade_no, total_amount=order_mount, return_url="{}/alipay/return/".format(settings["SITE_URL"]) ) re_url = settings["RETURN_URI"].format(data=url) res_data["re_url"] = re_url except OrderInfo.DoesNotExist: self.set_status(400) res_data["content"] = "订单不存在" self.finish(res_data)
async def get(self, question_id, *args, **kwargs): """ 根据question id 获取问题详情 :param question_id: :param args: :param kwargs: :return: """ question_details = await self.application.objects.execute( Question.extend().where( Question.id == get_int_or_none(question_id))) if not question_details: self.set_status(404) item_dict = model_to_dict(question_details[0]) item_dict["image"] = "{}/media/{}/".format(self.settings["SITE_URL"], item_dict["image"]) res_data = item_dict self.write(json.dumps(res_data))