From c4b02270cbaa4bfd0f8a3c8c613a7c7b2ac25f6a Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 9 Aug 2015 12:57:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BAgroup=20app=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=9B=B8=E5=85=B3=E7=9A=84models=E5=92=8Cviews=20?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group/__init__.py | 0 group/admin.py | 3 ++ group/migrations/0001_initial.py | 45 ++++++++++++++++++++ group/migrations/__init__.py | 0 group/models.py | 31 ++++++++++++++ group/serializers.py | 27 ++++++++++++ group/tests.py | 3 ++ group/views.py | 72 ++++++++++++++++++++++++++++++++ 8 files changed, 181 insertions(+) create mode 100644 group/__init__.py create mode 100644 group/admin.py create mode 100644 group/migrations/0001_initial.py create mode 100644 group/migrations/__init__.py create mode 100644 group/models.py create mode 100644 group/serializers.py create mode 100644 group/tests.py create mode 100644 group/views.py diff --git a/group/__init__.py b/group/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/group/admin.py b/group/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/group/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/group/migrations/0001_initial.py b/group/migrations/0001_initial.py new file mode 100644 index 0000000..f996a63 --- /dev/null +++ b/group/migrations/0001_initial.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=30)), + ('description', models.TextField()), + ('create_time', models.DateTimeField(auto_now_add=True)), + ('join_group_setting', models.IntegerField()), + ('visible', models.BooleanField(default=True)), + ('admin', models.ForeignKey(related_name='my_groups', to=settings.AUTH_USER_MODEL)), + ('members', models.ManyToManyField(to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'group', + }, + ), + migrations.CreateModel( + name='JoinGroupRequest', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('message', models.TextField()), + ('create_time', models.DateTimeField(auto_now_add=True)), + ('status', models.BooleanField(default=False)), + ('group', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(related_name='my_join_group_requests', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'join_group_request', + }, + ), + ] diff --git a/group/migrations/__init__.py b/group/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/group/models.py b/group/models.py new file mode 100644 index 0000000..aa255f4 --- /dev/null +++ b/group/models.py @@ -0,0 +1,31 @@ +# coding=utf-8 +from django.db import models + +from account.models import User + + +class Group(models.Model): + name = models.CharField(max_length=30) + description = models.TextField() + create_time = models.DateTimeField(auto_now_add=True) + admin = models.ForeignKey(User, related_name="my_groups") + # 0是公开 1是需要申请后加入 2是不允许任何人加入 + join_group_setting = models.IntegerField() + members = models.ManyToManyField(User) + # 解散小组后,这一项改为False + visible = models.BooleanField(default=True) + + class Meta: + db_table = "group" + + +class JoinGroupRequest(models.Model): + group = models.ForeignKey(User) + user = models.ForeignKey(User, related_name="my_join_group_requests") + message = models.TextField() + create_time = models.DateTimeField(auto_now_add=True) + # 是否处理 + status = models.BooleanField(default=False) + + class Meta: + db_table = "join_group_request" diff --git a/group/serializers.py b/group/serializers.py new file mode 100644 index 0000000..bd655ed --- /dev/null +++ b/group/serializers.py @@ -0,0 +1,27 @@ +# coding=utf-8 +from rest_framework import serializers + +from .models import Group + + +class CreateGroupSerializer(serializers.Serializer): + name = serializers.CharField(max_length=20) + description = serializers.CharField(max_length=300) + join_group_setting = serializers.IntegerField(min_value=0, max_value=2) + + +class EditGroupSerializer(serializers.Serializer): + name = serializers.CharField(max_length=20) + description = serializers.CharField(max_length=300) + join_group_setting = serializers.IntegerField() + + +class JoinGroupRequestSerializer(serializers.Serializer): + group = serializers.IntegerField() + message = serializers.CharField(max_length=30) + + +class GroupSerializer(serializers.ModelSerializer): + class Meta: + model = Group + exclude = ["members"] \ No newline at end of file diff --git a/group/tests.py b/group/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/group/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/group/views.py b/group/views.py new file mode 100644 index 0000000..5ccdcd9 --- /dev/null +++ b/group/views.py @@ -0,0 +1,72 @@ +# coding=utf-8 +from django.shortcuts import render + +from rest_framework.views import APIView + +from utils.shortcuts import error_response, serializer_invalid_response, success_response, paginate +from account.models import REGULAR_USER, ADMIN, SUPER_ADMIN + +from .models import Group, JoinGroupRequest +from .serializers import (CreateGroupSerializer, EditGroupSerializer, + JoinGroupRequestSerializer, GroupSerializer) + + +class GroupAdminAPIView(APIView): + def post(self, request): + """ + 创建小组的api + --- + request_serializer: CreateGroupSerializer + """ + serializer = CreateGroupSerializer(data=request.data) + if serializer.is_valid(): + data = serializer.data + group = Group.objects.create(name=data["name"], + description=data["description"], + join_group_setting=data["join_group_setting"], + admin=request.user) + return success_response(GroupSerializer(group).data) + else: + return serializer_invalid_response(serializer) + + def put(self, request): + """ + 修改小组信息的api + --- + request_serializer: EditGroupSerializer + """ + serializer = EditGroupSerializer(data=request.data) + if serializer.is_valid(): + data = serializer.data + try: + group = Group.objects.get(id=data["id"], admin=request.user) + except Group.DoesNotExist: + return error_response(u"小组不存在") + group.name = data["name"] + group.description = data["description"] + group.join_group_setting = data["join_group_setting"] + group.save() + return success_response(GroupSerializer(group).data) + else: + return serializer_invalid_response(serializer) + + def get(self, request): + """ + 查询小组列表或者单个小组的信息 + """ + 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) + 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) + return paginate(request, groups, GroupSerializer) \ No newline at end of file