Beispiel #1
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")
        try:
            from kinger.helpers import add_daily_record_visitor
            tile = Tile.objects.get(id=tid)
            add_daily_record_visitor(request.user,tile)
        except:
            pass
        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 #2
0
def daily_cookbook(request, cid, template_name="kinger/daily_activity.html"):
    """明日食谱详情页"""
    tommorrow = datetime.datetime.now() + datetime.timedelta(days = 1)
    user = request.user
    if not is_vip(user):  
        return render(request, "403.html")
    if cid == '0':
        cookbook =None
        today = tommorrow.date()
    else:
        cookbook = get_object_or_404(Cookbook, pk=cid)
        today = cookbook.date
   
    today_book = cookbook
    try:
        group = user.student.group
    except:
        return render(request, "403.html")
    school = group.school
    mentors = Mentor.objects.all() 
    q = Q(group=group) | Q(school=school)       
    cookbooks = Cookbook.objects.filter(q).exclude(breakfast='',light_breakfast='',
                lunch='',light_lunch='',dinner='',light_dinner='').order_by('-date')
    #禁止访问其他用户数据
    if today_book:
        try:
            cookbooks.get(pk=cid)
        except ObjectDoesNotExist:
            return render(request, "403.html")
    
        helpers.mark_cookbook_as_read(request,today_book)#标记当前用户食谱数据为已读
        add_daily_record_visitor(user,today_book)#增加用户访问记录
        
    effective_date = [str(x.date + datetime.timedelta(days = -1) ) for x in cookbooks]
    current_date = datetime.datetime.now().date()
    effective_date.append(str(current_date))
    
    try:
        lastday_book =cookbooks.filter(date__lt=today)[0]
    except:
        lastday_book = None
        
    tommory = datetime.datetime.now() + datetime.timedelta(days = 1)
    tommory_date = tommory.date()
    try:
        nextday_book =cookbooks.filter(date__gt=today,date__lte=tommory_date).reverse()[0]
    except:
        nextday_book = None
        
    current_book = get_daily_cook_books(user,datetime.datetime.now())
    if not nextday_book and not current_book and today_book:
        nextday_book = {"id":0}
    
    book_item = cook_book_item(today_book)
    today = today + datetime.timedelta(days = -1)
    ctx = {}
    ctx.update({"effective_date":effective_date,"book_item":book_item,"cookbooks": cookbooks, "today_book": today_book,"tommorrow":tommorrow, \
                "yesterday": lastday_book, "next_day": nextday_book,"mentors":mentors, "ty":"cookbook","today":today,"current_date":current_date})
    return render(request, template_name, ctx)
Beispiel #3
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 #4
0
def daily_activity(request, active_id, template_name="kinger/daily_activity.html"):
    """日常活动详情页"""
    user = request.user
    if not is_vip(request.user):  
        return render(request, "403.html")
    
    if active_id == '0':
        active =None
    else:
        active = get_object_or_404(Activity, pk=active_id)
        is_empty = is_empty_active(active.description)
        if is_empty:
            return render(request, "404.html")
        
    q = get_q_user(user)
    actives = Activity.objects.filter(q)
    
    mentors = Mentor.objects.all()         
    # 禁止访问其它用户的记录
    if active:
        try:
            actives.get(pk=active_id)
        except ObjectDoesNotExist:
            return render(request, "403.html")
        
        add_daily_record_visitor(user,active)#添加访问记录
   
    today = active.start_time if active else datetime.datetime.now()
    effective_date = [str(x.start_time.date()) for x in actives]
    current_date = datetime.datetime.now().date()
    effective_date.append(str(current_date))
 
    try:
        active_list = actives.filter(microsecond__gt=active.microsecond) if active else actives
        next_day = active_list.filter(start_time__gte=today).order_by("start_time","microsecond")[0]
    except:
        next_day = None
    try:
        active_list = actives.filter(microsecond__lt=active.microsecond) if active else actives
        yesterday = active_list.filter(start_time__lte=today).order_by("-start_time","-microsecond")[0]
    except:
        yesterday = None
        
    today_active = get_daily_activitie_tiles(user)
    if not next_day and not today_active and active:
        next_day = {"id":0}
    
    today = today.date()    
    ctx = {}
    ctx.update({"tile": active, "effective_date":effective_date,"yesterday": yesterday,\
                "next_day": next_day,"mentors":mentors,"ty":"events","today":today,"current_date":current_date})
    return render(request, template_name, ctx)
Beispiel #5
0
def view(request, tile_id, template_name="kinger/tile_view.html"):
    """ 瓦片详情页, 会显示与该瓦片相关的今日记录, 根据分类过滤"""
    tile = get_object_or_404(Tile, pk=tile_id)
    user = request.user
    tile.view_count += 1
    tile.save()
    add_daily_record_visitor(user,tile)
#    add_tile_visitor(user,tile)
    set_user_access(user)
    
    channel = request.session.get("kinger_channel")
    channel = request.GET.get("channel")
    type = request.GET.get("ty","")
    month = request.GET.get("month","")

    if channel == "tips":
        tiles = Tile.objects.get_tiles_edu(user)
        tiles = Tile.objects.filter(category__is_tips=True)

    elif channel == "all":
        tiles = Tile.objects.get_tiles_all_login(user)

    else:
        tiles = Tile.objects.get_tiles_baby(user)        
        # 禁止访问其它用户的记录
        if tile.creator != user:
            try:
                tiles.get(pk=tile_id)
            except ObjectDoesNotExist:
                if not tile.is_public:
                    return render(request, "403.html")

    today = tile.pub_time
    today_tiles = Tile.objects.get_tiles_date(date=today, tiles=tiles)
    daily_category = get_daily_category()
    if daily_category:
        today_tiles = today_tiles.exclude(category__parent=daily_category)
    today_tiles = today_tiles.order_by("-start_time","-microsecond")
    
    try:
        next_day = Tile.objects.get_tiles_date_grater(date=today, tiles=tiles.filter(microsecond__gt=tile.microsecond)).exclude(id=tile.id).order_by("start_time","microsecond")
        next_day = next_day.exclude(category__parent=daily_category)[0] if daily_category else next_day[0]   
    except:
        next_day = None
    try:
        yesterday = Tile.objects.get_tiles_date_less(date=today, tiles=tiles.filter(microsecond__lt=tile.microsecond)).exclude(id=tile.id).order_by("-start_time","-microsecond")
        yesterday = yesterday.exclude(category__parent=daily_category)[0] if daily_category else yesterday[0]       
    except:
        yesterday = None
        
    if tile.n_comments > 0:
        comments = Comment.objects.for_model(tile).select_related('user')\
            .order_by("-submit_date").filter(is_public=True).filter(is_removed=False)
    else:
        comments = None
        
    ctx = {}
    # content_type = ContentType.objects.get_for_model(Tile)

    # 单击分页
    #tile_pk_list = [t.pk for t in today_tiles]
    #p = Paginator(today_tiles,15)

    # 有可能来自不同频道,而没有找到
    #try:
        #p_index = tile_pk_list.index(tile.pk)//15 + 1
    #except:
        #messages.error(request, '请转换到全部')
       # p_index = 1

    #today_tiles = p.page(p_index)
    emo_config = helpers.emo_config()

    ctx.update({"tile": tile, "cur_tile": tile, "today_tiles": today_tiles, "ty":type, "comments": comments, \
        "yesterday": yesterday, "next_day": next_day,"month": month,"channel": channel,"emo_config":emo_config})
    return render(request, template_name, ctx)
Beispiel #6
0
def daily_cookbook(request, template_name="kinger/revision/axis_cookbook.html"):
    """明日食谱详情页"""
    
    date = request.POST.get('date','')
    id = request.POST.get('id',0)
    
    user = request.user
    if not is_vip(user):  
        return render(request, "403.html")
    try:
        group = user.student.group
    except:
        return render(request, "404.html")
    school = group.school
    q = Q(group=group) | Q(school=school)
    
    if not id:
        tommory = datetime.datetime.strptime(date,"%Y-%m-%d") + datetime.timedelta(days = 1)
        q_date = Q(date__startswith=tommory.date())
        cookbooks = Cookbook.objects.filter(q & q_date).order_by('group','-date')
        id = cookbooks[0].id if cookbooks else None
    
    tommorrow = datetime.datetime.now() + datetime.timedelta(days = 1)
    
    current_day = (datetime.datetime.strptime(date,"%Y-%m-%d") + datetime.timedelta(days = 1)).date() if date else tommorrow.date()
    if not id:
        cookbook =None
        today = current_day
    else:
        cookbook = get_object_or_404(Cookbook, pk=id)
        today = cookbook.date
    today_book = cookbook

    mentors = Mentor.objects.all() 
    q = Q(group=group) | Q(school=school)       
    cookbooks = Cookbook.objects.filter(q).exclude(breakfast='',light_breakfast='',
                lunch='',light_lunch='',dinner='',light_dinner='').order_by('-date')
    #禁止访问其他用户数据
    if today_book:
        try:
            cookbooks.get(pk=id)
        except ObjectDoesNotExist:
            return render(request, "403.html")
    
        helpers.mark_cookbook_as_read(request,today_book)#标记当前用户食谱数据为已读
        helpers.add_daily_record_visitor(user,today_book)#增加用户访问记录
        
    effective_date = [str(x.date + datetime.timedelta(days = -1) ) for x in cookbooks if check_user_cookbook_by_date(user,x.date)]
    current_date = current_day
    effective_date.append(str(current_date))
    
    try:
        lastday_book =cookbooks.filter(date__lt=today)[0]
    except:
        lastday_book = None
        
    tommory = datetime.datetime.now() + datetime.timedelta(days = 1)
    tommory_date = tommory.date()
    try:
        nextday_book =cookbooks.filter(date__gt=today,date__lte=tommory_date).reverse()[0]
    except:
        nextday_book = None
        
    current_book = get_daily_cook_books(user,datetime.datetime.now())
    
    book_item = cook_book_item(today_book)
    book_item_pre = cook_book_item(lastday_book)
    book_item_next = cook_book_item(nextday_book)
    
    if not nextday_book and not current_book and today_book:
        nextday_book = {"id":0}

    today = today + datetime.timedelta(days = -1)
    ctx = {}
    ctx.update({"effective_date":effective_date,"book_item":book_item,"cookbooks": cookbooks,\
                 "today_book": today_book,"tommorrow":tommorrow, "yesterday": lastday_book,\
                  "next_day": nextday_book,"mentors":mentors, "ty":"cookbook","today":today,\
                  "current_date":current_date,'book_item_pre':book_item_pre,'book_item_next':book_item_next})
    data = render(request, template_name,ctx)
    con=data.content
    return ajax_ok('成功',con)
Beispiel #7
0
def daily_activity(request, template_name="kinger/revision/axis_daily_activity.html"):
    """日常活动详情页"""
    date = request.POST.get('date','')
    id = request.POST.get('id',0)
    user = request.user
    if not is_vip(request.user):  
        return render(request, "403.html")
    
    try:
        group = user.student.group
        q = Q(group=group) | Q(user=user)
    except:
        q = Q(user=user)
    actives = Activity.objects.filter(q)
    
    if id:
        active_id = id
    else:
        date_active = actives.filter(start_time__startswith=date)
        active_id = date_active[0].id if date_active else 0
        
    if active_id == 0:
        active =None
    else:
        active = get_object_or_404(Activity, pk=active_id)
        is_empty = is_empty_active(active.description)
        if is_empty:
            return render(request, "404.html")
        
    q = get_q_user(user)
    actives = Activity.objects.filter(q)
    
    mentors = Mentor.objects.all()         
    # 禁止访问其它用户的记录
    if active:
        try:
            actives.get(pk=active_id)
        except ObjectDoesNotExist:
            return render(request, "403.html")
        
        helpers.add_daily_record_visitor(user,active)#添加访问记录
    
    current_date = datetime.datetime.strptime(date,"%Y-%m-%d") if date else datetime.datetime.now()
    today = active.start_time if active else current_date
    effective_date = [str(x.start_time.date()) for x in actives]
    
    effective_date.append(str(current_date))
 
    try:
        active_list = actives.filter(microsecond__gt=active.microsecond).exclude(id=active.id) if active else actives
        next_day = active_list.filter(start_time__gte=today).order_by("microsecond")[0]
    except:
        next_day = None
    try:
        active_list = actives.filter(microsecond__lt=active.microsecond).exclude(id=active.id) if active else actives
        yesterday = active_list.filter(start_time__lte=today).order_by("-microsecond")[0]
    except:
        yesterday = None
        
    today_active = get_daily_activitie_tiles(user)
    if not next_day and not today_active and active:
        next_day = {"id":0}
    
    today = today.date()    
    ctx = {}
    ctx.update({"tile": active, "effective_date":effective_date,"yesterday": yesterday,\
                "next_day": next_day,"mentors":mentors,"ty":"events","today":today,"current_date":current_date})
    data = render(request, template_name,ctx)
    con=data.content
    return ajax_ok('成功',con)
Beispiel #8
0
def theme_view(request,template_name="kinger/revision/axis_theme_view.html"):
    """ 主题详情页"""
    tile_id = request.GET.get('tid')
    ty = request.GET.get('ty')
    if ty == 'theme':
        themes = Tile.objects.filter(new_category_id__gt=2400,new_category_id__lte=2412)[:1]
        tile_id = themes[0].id if themes.count() else 0
    cid = request.GET.get('cid')
    if tile_id:
        tile = get_object_or_404(Tile, pk=tile_id)
    else:
        try:
            tiles_all = Tile.objects.filter(new_category__id__startswith='24').exclude(new_category__id=2400)
            if cid:
                tiles_all = tiles_all.filter(new_category__id=cid)
            tile = tiles_all[0]
        except:
            data = {'status':False,'msg':"暂无主题内容"}
            return HttpResponse(json.dumps(data))
    user = request.user
    tile.view_count += 1
    tile.save()
    helpers.add_daily_record_visitor(user,tile)
    set_user_access(user)
    
    channel = request.GET.get("channel")
    type = request.GET.get("ty","")
    month = request.GET.get("month","")
    tpage = int(request.GET.get("tpage",1))
    
    tiles = Tile.objects.filter(new_category_id__gt=2400,new_category_id__lte=2412)
    month_tiles = tiles.filter(new_category=tile.new_category)[0:3]
    month_tiles_pks = [m.id for m in month_tiles]
    year_tiles = tiles.order_by('-n_comments')[0:4]
    

    today = tile.start_time
    today_tiles = Tile.objects.get_tiles_date(date=today, tiles=tiles).order_by("-microsecond")
    
    try:
        next_day = Tile.objects.get_tiles_date_grater(date=today, tiles=tiles.filter(microsecond__gt=tile.microsecond,id__in=month_tiles_pks)).exclude(id=tile.id).order_by("microsecond")
        next_day = next_day[0]   
    except:
        next_day = None
    try:
        yesterday = Tile.objects.get_tiles_date_less(date=today, tiles=tiles.filter(microsecond__lt=tile.microsecond,id__in=month_tiles_pks)).exclude(id=tile.id).order_by("-microsecond")
        yesterday = yesterday[0]       
    except:
        yesterday = None
    
    is_last_page = True 
    if tile.n_comments > 0:
        comments = Comment.objects.for_model(tile).select_related('user')\
            .order_by("-submit_date").filter(is_public=True).filter(is_removed=False)
        if comments.count() > 5:
            comments = comments[0:5]
            is_last_page = False 
    else:
        comments = None
        
    ctx = {}
    emo_config = helpers.emo_config()
    tile_all = [t for t in tiles]
    tile_order = tile_all.index(tile)
#    if tpage == (tile_order / 10) + 1:
#        order = (tile_order + 1) % 10
#    else:
#        order = None
    if tpage == 1:
        tpage = (tile_order / 10) + 1
    start = (tpage - 1) * 10
    end = tpage * 10
    is_last_tpage = True if end >= len(tile_all) else False
    tiles = tile_all[start:end]
    
    is_ajax = True if request.method == 'POST' else False
    ctx.update({"tile": tile, "cur_tile": tile, "today_tiles": today_tiles, "ty":type, "comments": comments,"year_tiles":year_tiles,\
        "yesterday": yesterday, "next_day": next_day,"month": month,"channel": channel,"tpage":tpage,'month_tiles':month_tiles,\
         "tiles": tiles,"emo_config":emo_config,'is_last_tpage':is_last_tpage,"is_last_page":is_last_page,'is_ajax':is_ajax})
    if is_ajax:
        data = render(request, template_name,ctx)
        con=data.content
        return ajax_ok('成功',con)
    else:
        template_name = "kinger/revision/axis_theme_view_page.html"
        return render(request, template_name,ctx)
Beispiel #9
0
def tile_view(request, tile_id, template_name="kinger/revision/axis_tile_view.html"):
    """ 瓦片详情页, 会显示与该瓦片相关的今日记录, 根据分类过滤"""
    user = request.user
    if not user.is_authenticated():
        data = json.dumps({'status':"error"})
        return HttpResponse(data)
    tile = get_object_or_404(Tile, pk=tile_id)
    tile.view_count += 1
    tile.save()
    helpers.add_daily_record_visitor(user,tile)
    set_user_access(user)
    
    channel = request.GET.get("channel")
    type = request.GET.get("ty","")
    month = request.GET.get("month","")
    tpage = int(request.GET.get("tpage",1))

    if channel == "edu":
        tiles = Tile.objects.get_tiles_edu(user)
    elif channel == "life":
        tiles = Tile.objects.get_tiles_life(user)
    else:
        tiles = Tile.objects.get_tiles_baby(user).exclude(new_category_id=9)      
        # 禁止访问其它用户的记录
        if tile.creator != user:
            try:
                tiles.get(pk=tile_id)
            except ObjectDoesNotExist:
                if not tile.is_public:
                    return render(request, "403.html")
    
    tiles = tiles.exclude(new_category_id__in=range(1130,1138)).order_by("-microsecond")
    recommends = Tile.objects.get_tiles_edu(user).order_by("-microsecond")[0:100]
    recommend_tiles = [recommends[i] for i in random.sample(range(100),4)]
    today = tile.start_time
    today_tiles = Tile.objects.get_tiles_date(date=today, tiles=tiles)
    daily_category = get_daily_category()
    if daily_category:
        today_tiles = today_tiles.exclude(new_category__parent=daily_category)
    today_tiles = today_tiles.order_by("-microsecond")
    
    try:
        next_day = Tile.objects.get_tiles_date_grater(date=today, tiles=tiles.filter(microsecond__gt=tile.microsecond)).exclude(id=tile.id).order_by("microsecond")
        next_day = next_day.exclude(new_category__parent=daily_category)[0] if daily_category else next_day[0]   
    except:
        next_day = None
    try:
        yesterday = Tile.objects.get_tiles_date_less(date=today, tiles=tiles.filter(microsecond__lt=tile.microsecond)).exclude(id=tile.id).order_by("-microsecond")
        yesterday = yesterday.exclude(new_category__parent=daily_category)[0] if daily_category else yesterday[0]       
    except:
        yesterday = None
     
    is_last_page = True 
    if tile.n_comments > 0:
        comments = Comment.objects.for_model(tile).select_related('user')\
            .order_by("-submit_date").filter(is_public=True).filter(is_removed=False)
        if comments.count() > 5:
            comments = comments[0:5]
            is_last_page = False 
    else:
        comments = None
        
    ctx = {}

    emo_config = helpers.emo_config()
    tile_all = [t for t in tiles]
    try:
        tile_order = tile_all.index(tile)
    except:
        tile_order = 0
    print tile_order,'ttttttttttttttttttt'
#    if tpage == (tile_order / 10) + 1:
#        order = (tile_order + 1) % 10
#    else:
    order = (tile_order) % 10
    print order,'oooooooooooooooooooooooooo'
    if tpage == 1:
        tpage = (tile_order / 10) + 1
    start = (tpage - 1) * 10
    end = tpage * 10
    is_last_tpage = True if end >= len(tile_all) else False
    tiles = tile_all[start:end]
    
    is_ajax = True if request.method == 'POST' else False
    ctx.update({"tile": tile, "cur_tile": tile, "today_tiles": today_tiles, "ty":type, "comments": comments,\
        "yesterday": yesterday, "next_day": next_day,"month": month,"channel": channel,"tpage":tpage,\
         "tiles": tiles,"emo_config":emo_config,"order":order,'is_last_tpage':is_last_tpage,\
         "is_last_page":is_last_page,"recommend_tiles":recommend_tiles,'is_ajax':is_ajax})

    if is_ajax:
        data = render(request, template_name,ctx)
        con=data.content
        return ajax_ok('成功',con)
    else:
        template_name = "kinger/revision/tile_view.html"
        return render(request, template_name,ctx)