通过项目来深入理解tornado(九):申请加入小组功能完成
通过项目来深入理解tornado(八):申请加入小组完成
前言
申请加入小组主要的思路是先查询有没有提交申请,然后根据结果再进行相应的处理
import os import json from playhouse.shortcuts import model_to_dict from tornado_bbs.handler import BaseHandler from tools.auth_dec import authenticated from .forms import CommunityGroupForm, GroupApplyForm import aiofiles import uuid from .models import CommunityGroup, CommunityGroupMember from tools.help_func import json_time class GroupMemberHandler(BaseHandler): @authenticated async def post(self, group_id, *args, **kwargs): re_data = {} params = json.loads(self.request.body.decode('utf8')) form = GroupApplyForm.from_json(params) if form.validate(): try: group = await self.application.objects.get(CommunityGroup, id=group_id) await self.application.objects.get(CommunityGroupMember, user=self.current_user,status='agree') self.set_status(400) re_data['non_fields'] = '用户已经加入' except CommunityGroup.DoesNotExist: self.set_status(404) except CommunityGroupMember.DoesNotExist: apply = await self.application.objects.create(CommunityGroupMember, user=self.current_user, community=group, apply_reason=form.apply_reason.data) re_data['id'] = apply.id else: for field in form.errors: re_data[field] = form.errors[field][0] self.finish(re_data)
1.需要说明的是。objects 是 peewee_async 用Manager(database) 生成的
生成查询语句用原来的peewee 语法格式是 类.属性==xx,而peewee_async的objects是
await self.application.objects.get(CommunityGroupMember, user=self.current_user,status='agree')
第一个参数为类名,后面才是条件。