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")
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)
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")
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)
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)
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)
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)
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)
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)