通过项目来深入理解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')

  第一个参数为类名,后面才是条件。


 

posted @ 2018-11-28 16:05  __Miracle  阅读(261)  评论(0编辑  收藏  举报