通过项目来深入理解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')
第一个参数为类名,后面才是条件。

浙公网安备 33010602011771号