From c772a4bcdca4a015c9b6293e75fcb97da7c8d655 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 9 Aug 2015 19:59:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B0=8F=E7=BB=84=E6=88=90?= =?UTF-8?q?=E5=91=98=E7=AE=A1=E7=90=86=E7=9A=84api=EF=BC=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9D=83=E9=99=90=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=92=8C=E7=B2=BE=E7=AE=80=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group/serializers.py | 16 ++++++++++- group/views.py | 67 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 71 insertions(+), 12 deletions(-) diff --git a/group/serializers.py b/group/serializers.py index e8f83e36..9718fede 100644 --- a/group/serializers.py +++ b/group/serializers.py @@ -1,7 +1,8 @@ # coding=utf-8 from rest_framework import serializers -from .models import Group +from account.serializers import UserSerializer +from .models import Group, UserGroupRelation class CreateGroupSerializer(serializers.Serializer): @@ -25,3 +26,16 @@ class GroupSerializer(serializers.ModelSerializer): class Meta: model = Group exclude = ["members"] + + +class GroupMemberSerializer(serializers.ModelSerializer): + user = UserSerializer() + + class Meta: + model = UserGroupRelation + exclude = ["id", "group"] + + +class EditGroupMemberSerializer(serializers.Serializer): + group_id = serializers.IntegerField() + members = serializers.ListField(child=serializers.IntegerField()) \ No newline at end of file diff --git a/group/views.py b/group/views.py index 461b6657..7b9677b2 100644 --- a/group/views.py +++ b/group/views.py @@ -9,10 +9,34 @@ from account.decorators import login_required from .models import Group, JoinGroupRequest, UserGroupRelation from .serializers import (CreateGroupSerializer, EditGroupSerializer, - JoinGroupRequestSerializer, GroupSerializer) + JoinGroupRequestSerializer, GroupSerializer, + GroupMemberSerializer, EditGroupMemberSerializer) -class GroupAdminAPIView(APIView): +class GroupAPIViewBase(object): + def get_group(request, group_id): + """ + 根据group_id查询指定的小组的信息,结合判断用户权限 + 管理员可以查询所有的小组,其他用户查询自己创建的自傲组 + """ + if request.user.admin_type == SUPER_ADMIN: + group = Group.object.get(id=group_id, visible=True) + else: + group = Group.object.get(id=group_id, visible=True, admin=request.user) + return group + + def get_groups(request): + """ + 如果是超级管理员,就返回全部的小组 + 如果是管理员,就返回他创建的全部小组 + """ + if request.user.admin_type == SUPER_ADMIN: + groups = Group.objects.filter(visible=True) + else: + groups = Group.objects.filter(admin=request.user, visible=True) + + +class GroupAdminAPIView(APIView, GroupAPIViewBase): def post(self, request): """ 创建小组的api @@ -40,7 +64,7 @@ class GroupAdminAPIView(APIView): if serializer.is_valid(): data = serializer.data try: - group = Group.objects.get(id=data["id"], admin=request.user) + group = self.get_group(request, data["group_id"]) except Group.DoesNotExist: return error_response(u"小组不存在") group.name = data["name"] @@ -60,21 +84,41 @@ class GroupAdminAPIView(APIView): group_id = request.GET.get("group_id", None) if group_id: try: - if request.user.admin_type == SUPER_ADMIN: - group = Group.object.get(id=group_id) - else: - group = Group.object.get(id=group_id, admin=request.user) + group = self.get_group(request, group_id) return success_response(GroupSerializer(group).data) except Group.DoesNotExist: return error_response(u"小组不存在") else: - if request.user.admin_type == SUPER_ADMIN: - groups = Group.objects.filter(visible=True) - else: - groups = Group.objects.filter(admin=request.user, visible=True) + groups = self.get_groups(request) return paginate(request, groups, GroupSerializer) +class GroupMemberAdminAPIView(APIView, GroupAPIViewBase): + def get(self, request): + group_id = request.GET.get("group_id", None) + if not group_id: + return error_response(u"参数错误") + try: + group = self.get_group(request, group_id) + except Group.DoesNotExist: + return error_response(u"小组不存在") + + return paginate(request, UserGroupRelation.objects.filter(group=group), GroupMemberSerializer) + + def put(self, request): + serializer = EditGroupMemberSerializer(data=request.data) + if serializer.is_valid(): + try: + group = self.get_group(request, group_id) + except Group.DoesNotExist: + return error_response(u"小组不存在") + user_id_list = serializer.data["members"] + UserGroupRelation.objects.delete(group=group, user__id__in=user_id_list) + return success_response(u"删除成功") + else: + return serializer_invalid_response(serializer) + + def join_group(user, group): return UserGroupRelation.objects.create(user=user, group=group) @@ -103,5 +147,6 @@ class JoinGroupAPIView(APIView): keyword = request.GET.get("keyword", None) if not keyword: return error_response(u"参数错误") + # 搜索包含这个关键词的 没有解散的 而且允许加入的小组 groups = Group.objects.filter(name__contains=keyword, visible=True, join_group_setting__lte=2) return paginate(request, groups, GroupSerializer)