Beispiel #1
0
    def list(self, request):
        """
        获取登录用户所在的班级列表

        ``GET`` `account/profile/class_list <http://192.168.1.222:8080/v1/account/profile/class_list>`_

        """
        try:
            from oa.helpers import user_access_list
            user = request.user
            code_list = [c.code for c in user_access_list(user)]
            school_level = True if "manage_school_tile" in code_list else False
            if school_level:
                school = request.user.teacher.school
                group,created = Group.objects.get_or_create(name="全园班级",school_id=school.id,type=3,creator=school.creator,grade_id=0)
                group_pks = [group.id]
                queryset = Group.objects.filter(pk__in=group_pks).all()
            else:
                group_wx_pks = [gv.id for gv in request.user.teacher.groups.all()]
                group_oa_pks = [go.group_id for go in GroupTeacher.objects.filter(teacher=request.user.teacher)]
                group_pks = group_wx_pks + group_oa_pks
                queryset = Group.objects.filter(pk__in=group_pks).all()
            return query_range_filter(request.GET, queryset, "classes")
        except ObjectDoesNotExist:
            pass

        try:
            group = request.user.student.group
            queryset = Group.objects.filter(id=group.id).all()
            return query_range_filter(request.GET, queryset, "classes")
        except ObjectDoesNotExist:
            pass

        return rc.NOT_FOUND
Beispiel #2
0
    def by_class(self, request):
        """
        获取学生列表

        ``GET`` `students/by_class/ <http://192.168.1.222:8080/v1/students/by_class>`_

        :param class_id:
            学生所在班级 id
        """
        class_id = request.GET.get("class_id")
        if not class_id:
            return rc.BAD_REQUEST
        
        from oa.helpers import user_access_list
        user = request.user
        code_list = [c.code for c in user_access_list(user)]
        school_level = True if "manage_school_tile" in code_list else False

        if school_level:
            try:
                group = Group.objects.get(pk=class_id)
#                queryset = Group.objects.filter(school__pk=group.school_id).exclude(type=3)
                queryset = GroupHandler().read(request)
                print queryset,'qqqqqqqqqqqqqqqqqqqqqq'
            except ObjectDoesNotExist, e:
                return rc.not_here(e)
            return query_range_filter(request.GET, queryset, "students")
Beispiel #3
0
    def read(self, request,):
        """
        与某人的沟通记录

        ``GET`` `messages/history/ <http://192.168.1.222:8080/v1/messages/history>`_

        :param uid:
            用户 id
        """
        params = request.GET
        user_id = request.GET.get("uid")
        try:
            recipient = User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return rc.NOT_HERE

        messages = Message.objects.get_conversation_between(request.user,
                                                        recipient)

       # Update all the messages that are unread.
        message_pks = [m.pk for m in messages]
        unread_list = MessageRecipient.objects.filter(message__in=message_pks,
                                                      user=request.user,
                                                      read_at__isnull=True)
        now = get_datetime_now()
        unread_list.update(read_at=now)
        return query_range_filter(params, messages, "messages")
Beispiel #4
0
    def read(self, request,):
        """
        班级记录查询接口

        ``GET`` `messages/history_to_class/ <http://192.168.1.222:8080/v1/messages/history_to_class>`_

        :param class_id:班级 id
        :param since_id:返回ID比since_id大的评论,默认为0。
        :param max_id:返回ID小于或等于max_id的评论,默认为0。
        :param count:单页返回的记录条数,默认为50
        :param page:结果的页码,默认为1
        """
        params = request.GET
        class_id = request.GET.get("class_id")
        since_id = request.GET.get("since_id","0")
        max_id = request.GET.get("max_id","0")
        count = request.GET.get("count","0")
        page = request.GET.get("page","0")
        try:
            group = Group.objects.get(pk=class_id)
        except Group.DoesNotExist:
            return rc.NOT_HERE

        contents = MessageToClass.objects.filter(group=group)
        contents = contents.filter(id__gte=since_id) if since_id!='0' else contents
        contents = contents.filter(id__lte=max_id) if max_id!='0' else contents
        return query_range_filter(params, contents, "messages")
Beispiel #5
0
    def get(self, request):
        """
        获得某条瓦片的评论详细信息

        ``GET`` `comments/show/ <http://192.168.1.222:8080/v1/comments/show>`_

        :param tid:
            瓦片 id.

        :param comment_id:
            某条评论的 id
        """
        params = request.GET

        # single one
        comment_id = params.get("comment_id")
        if comment_id:
            try:
                return Comment.objects.get(pk=comment_id, is_removed=False, is_public=True)
            except Comment.DoesNotExist:
                return rc.NOT_HERE

        # all
        tid = params.get("tid")
        ct = ContentType.objects.get_by_natural_key("kinger", "tile")
        queryset = Comment.objects.filter(object_pk=tid, content_type=ct) \
            .filter(is_removed=False, is_public=True).order_by("-submit_date")

        return query_range_filter(params, queryset, "comments")
Beispiel #6
0
    def read(self, request):
        """
        获取某个活动的信息

        ``GET`` 

        :param id:
            某个活动的 id
        """
        params = request.GET
        active_id = params.get("id")
        user_id = params.get("uid")
        class_id = params.get("class_id")
        if active_id:
            try:
                active = Activity.objects.get(pk=active_id)
                return active
            except Activity.DoesNotExist:
                return rc.NOT_HERE
            
        if not user_id and not class_id:
            return rc.bad_request( "user_id or class_id is requierd")
        q = Q(user__pk=user_id) if user_id else Q(group__pk=class_id)
        queryset = Activity.objects.filter(q).order_by("-start_time","-id")
        return query_range_filter(params, queryset, "actives")
Beispiel #7
0
    def sub_category(self, request):
        """
        获取某个父类的子类

        ``GET`` `tiles/categorys/subcategory <http://192.168.1.222:8080/v1/tiles/categorys/subcategory>`_

        """
        self.fields = ('category_id','name','parent_id','parent_name','sort')

        is_tips = request.GET.get('is_tips', False)
        parent_id = request.GET.get('parent_id')
        identity = request.GET.get('identity')

        try:
            if parent_id:
                # 特定父类的子类
                qs = TileCategory.objects.get_one_parent_sub(parent_id)
            else:
                # 某个类型的子类
                qs = TileCategory.objects.get_category(layer='sub', tips=is_tips, identity=identity)
            
            return query_range_filter(request.GET, qs, "categorys")

        except Exception, e:
            print e
            return rc.BAD_REQUEST    
Beispiel #8
0
    def read(self, request):
        '''
        获取瓦片类型列表

        ``GET`` `tiles/types/ <http://192.168.1.222:8080/v1/tiles/types>`_

        '''
        qs = TileType.objects.all()
        return query_range_filter(request.GET, qs, "types")
Beispiel #9
0
    def read(self, request):
        '''
        获得瓦片标签列表

        ``GET`` `tiles/tags/ <http://192.168.1.222:8080/v1/tiles/tags>`_

        '''
        qs = TileTag.objects.all()
        return query_range_filter(request.GET, qs, "tags")
Beispiel #10
0
    def read(self, request):
        """
        获得所有内容(教师使用)

        ``GET`` `tiles/ <http://192.168.1.222:8080/v1/tiles>`_

        :param uid:
            用户 id. 用于查询与某用户相关的瓦片

        :param class_id:
            班级 id, 查询用户所在班级相关的瓦片


        获得某条内容的详细信息

        ``GET`` `tiles/show/ <http://192.168.1.222:8080/v1/tiles/show>`_

        :param id:
            某个瓦片的 id
        """
    
        params = request.GET
        tile_id = params.get("id")
        user_id = params.get("uid")
        class_id = params.get("class_id")


        if tile_id:
            try:
                tile = Tile.objects.get(pk=tile_id)
                tile.api_count += 1
                tile.save()
                
                add_daily_record_visitor(request.user,tile)
                
                pro = request.user.get_profile()
                pro.last_access = datetime.datetime.now()
                pro.save()
                return tile
            except Tile.DoesNotExist:
                return rc.NOT_HERE

        if not user_id and not class_id:
            #return rc.BAD_REQUEST
            return rc.bad_request( "user_id or class_id is requierd")

        q = Q(user__pk=user_id) if user_id else Q(group__pk=class_id)
        queryset = Tile.objects.filter(q).exclude(new_type_id=4).order_by("-microsecond","-id")
        
        mictime = request.GET.get("mictime", "")      
        if mictime:
            queryset = queryset.filter(microsecond__lte=mictime)
            
        return query_range_filter(params, queryset, "tiles")
Beispiel #11
0
    def list(self, request):
        """
        获取登录用户所在的班级列表

        ``GET`` `account/profile/class_list <http://192.168.1.222:8080/v1/account/profile/class_list>`_

        """
        try:
            queryset = request.user.teacher.groups.all()
            return query_range_filter(request.GET, queryset, "classes")
        except ObjectDoesNotExist:
            pass

        try:
            group = request.user.student.group
            queryset = Group.objects.filter(id=group.id).all()
            return query_range_filter(request.GET, queryset, "classes")
        except ObjectDoesNotExist:
            pass

        return rc.NOT_FOUND
Beispiel #12
0
    def read(self, request):
        params = request.GET
        type_id = params.get("type_id")

        q = Q()
        if type_id:
            try:
                type = CommentTemplaterType.objects.get(pk=type_id)
                q = Q(type__pk=type_id)
            except CommentTemplaterType.DoesNotExist:
                return rc.NOT_HERE

        queryset = CommentTemplater.objects.filter(q)
        return query_range_filter(params, queryset, "templaters")
Beispiel #13
0
    def parent_category(self, request):
        """
        获取父类

        ``GET`` `tiles/categorys <http://192.168.1.222:8080/v1/tiles/categorys>`_

        """       

        self.fields = ('category_id','name','sort')

        identity = request.GET.get('identity')
        is_tips = request.GET.get('is_tips', False)

        qs = TileCategory.objects.get_category(layer='parent', tips=is_tips, identity=identity)

        return query_range_filter(request.GET, qs, "categorys")
Beispiel #14
0
        if not class_id:
            return rc.BAD_REQUEST
        
        from oa.helpers import user_access_list
        user = request.user
        code_list = [c.code for c in user_access_list(user)]
        school_level = True if "manage_school_tile" in code_list else False

        if school_level:
            try:
                group = Group.objects.get(pk=class_id)
#                queryset = Group.objects.filter(school__pk=group.school_id).exclude(type=3)
                queryset = GroupHandler().read(request)
                print queryset,'qqqqqqqqqqqqqqqqqqqqqq'
            except ObjectDoesNotExist, e:
                return rc.not_here(e)
            return query_range_filter(request.GET, queryset, "students")
        
        else:
            try:
                queryset = Student.objects.filter(group__pk=class_id)
            except ObjectDoesNotExist, e:
                return rc.not_here(e)
            return query_range_filter(request.GET, queryset, "students")

    def read(self, request, category=None):
        func = getattr(self, category)
        if not func and not callable(func):
            return rc.FORBIDDEN
        return func(request)
Beispiel #15
0
 def read(self, request):
     qs = CommentTemplaterType.objects.all()
     return query_range_filter(request.GET, qs, "types")
Beispiel #16
0
            pass
        
        try:
            log = Access_log()
            log.type = 2
            log.user = request.user
            log.url = request.get_full_path()
            log.save()
        except:
            pass
        
        mictime = request.GET.get("mictime", "")      
        if mictime:
            qs = qs.filter(microsecond__lte=mictime)
        #return query_range_filter(request.GET, qs, "tiles")
        rs = query_range_filter(request.GET, qs, "tiles")
 
        self.cache_last_tile_id(rs,request.user)
        return rs

    def for_baby_with_promotion(self, request):
        '''
        ``by_babys`` + ``by_tags`` 接口的所有内容(家长使用)

        ``GET`` `tiles/by_babys_with_push/ <http://192.168.1.222:8080/v1/tiles/by_babys_with_push>`_

        '''

        qs = Tile.objects.get_tiles_all_login(request.user)
        qs = qs.exclude(new_type_id=4)