数据统计

1.用户总量统计

接口分析

请求方式: GET /meiduo_admin/statistical/total_count/

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

{
        "count": "总用户量",
        "date": "日期"
}
返回值类型是否必须说明
count int 总用户量
date date 日期

后端实现

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from datetime import date

from users.models import User

class UserTotalCountView(APIView):
    # 指定管理员权限
    permission_classes = [IsAdminUser]

    def get(self,request):
        # 获取当前日期
        now_date=date.today()
        # 获取所有用户总数
        count= User.objects.all().count()
        return Response({
            'count':count,
            'date':now_date
        })

 

2.日增用户统计

接口分析

请求方式: GET /meiduo_admin/statistical/day_increment/

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

{
        "count": "新增用户量",
        "date": "日期"
}
返回值类型是否必须说明
count int 新增用户量
date date 日期

后端实现

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from datetime import date

from users.models import User

class UserDayCountView(APIView):
     # 指定管理员权限
    permission_classes = [IsAdminUser]

    def get(self,request):
        # 获取当前日期
        now_date=date.today()
        # 获取当日注册用户数量 date_joined 记录创建账户时间
        count=User.objects.filter(date_joined__gte=now_date).count()
        return Response({
            "count":count,
            "date" : now_date
        })

 

3.日活跃用户统计

接口分析

请求方式:GET /meiduo_admin/statistical/day_active/

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

{
        "count": "活跃用户量",
        "date": "日期"
}
返回值类型是否必须说明
count int 活跃用户量
date date 日期

后端实现

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from datetime import date

from users.models import User

class UserActiveCountView(APIView):
     # 指定管理员权限
    permission_classes = [IsAdminUser]

    def get(self,request):
        # 获取当前日期
        now_date=date.today()
        # 获取当日登录用户数量  last_login记录最后登录时间
        count=User.objects.filter(last_login__gte=now_date).count()
        return Response({
            "count":count,
            "date" : now_date
        })

 

4.日下单用户量统计

接口分析

请求方式:GET /meiduo_admin/statistical/day_orders/

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

{
        "count": "下单用户量",
        "date": "日期"
}
返回值类型是否必须说明
count int 下单用户量
date date 日期

后端实现

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from datetime import date

from users.models import User

class UserOrderCountView(APIView):
     # 指定管理员权限
    permission_classes = [IsAdminUser]

    def get(self,request):
        # 获取当前日期
        now_date=date.today()
        # 获取当日下单用户数量  orders__create_time 订单创建时间
        count=User.objects.filter(orders__create_time__gte=now_date).count()
        return Response({
            "count":count,
            "date" : now_date
        })

 

5.日分类商品访问量月增用户统计

接口分析

请求方式:GET /meiduo_admin/statistical/month_increment/

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

 [
        {
            "count": "用户量",
            "date": "日期"
        },
        {
            "count": "用户量",
            "date": "日期"
        },
        ...
    ]
返回值类型是否必须说明
count int 新增用户量
date date 日期

后端实现

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from datetime import date

from users.models import User


class UserMonthCountView(APIView):
    # 指定管理员权限
    permission_classes = [IsAdminUser]

    def get(self, request):
        # 获取当前日期
        now_date = date.today()
        # 获取一个月前日期
        start_date = now_date - timedelta(29)
        # 创建空列表保存每天的用户量
        date_list = []

        for i in range(30):
            # 循环遍历获取当天日期
            index_date = start_date + timedelta(days=i)
            # 指定下一天日期
            cur_date = start_date + timedelta(days=i + 1)
            # 查询条件是大于当前日期index_date,小于明天日期的用户cur_date,得到当天用户量
            count = User.objects.filter(date_joined__gte=index_date, date_joined__lt=cur_date).count()

            date_list.append({
                'count': count,
                'date': index_date
            })

            return Response(date_list)
    def get(self, request):

        date_now = date.today()

        list_month_count = []
        for i in range(29, -1, -1):
            date_max = date_now - timedelta(i)
            count = User.objects.filter(date_joined__gte=date_max, date_joined__lt=date_max + timedelta(1)).count()
            list_month_count.append({
                'date': date_max,
                'count': count
            })

        return Response(list_month_count)

 

6.日分类商品访问量

接口分析

请求方式: GET /meiduo_admin/statistical/goods_day_views/

请求参数: 通过请求头传递jwt token数据。

返回数据: JSON

 [
        {
            "category": "分类名称",
            "count": "访问量"
        },
        {
            "category": "分类名称",
            "count": "访问量"
        },
        ...
    ]
返回值类型是否必须说明
category int 分类名称
count int 访问量

后端实现

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser
from datetime import date

from users.models import User
from goods.models import GoodsVisitCount

class GoodsDayView(APIView):

    def get(self,request):
        # 获取当天日期
        now_date=date.today()
        # 获取当天访问的商品分类数量信息
        data=GoodsVisitCount.objects.filter(date=now_date)
        # 序列化返回分类数量
        ser=GoodsSerializer(data,many=True)

        return Response(ser.data)
序列化器的定义

class GoodsSerializer(serializers.ModelSerializer):
    # 指定返回分类名称
    category=serializers.StringRelatedField(read_only=True)
    class Meta:
        model=GoodsVisitCount
        fields=('count','category')
    def get(self, request):

        # date_now = date.today()
        #
        # visit_categories = GoodsVisitCount.objects.filter(date__gte=date_now)
        #
        # day_visit_list = []
        # for cat in visit_categories:
        #     day_visit_list.append({
        #         'category': cat.category.name,
        #         'count': cat.count
        #     })
        #
        # return Response(day_visit_list)

 

posted @ 2020-08-14 03:32  sewen  Views(482)  Comments(0Edit  收藏  举报