美多后台第三天

美多后台管理 第三天

今日需要包
from rest_framework.generics import ListAPIView
from rest_framework.views import APIView
from rest_framework.response import Response

from apps.goods.models import GoodsVisitCount
from apps.users.models import User
from datetime import datetime, date, timedelta
from rest_framework.permissions import IsAdminUser
from apps.meiduo_admin.serializers import statistical

今天知识点

  • 登录
  • 数据统计
  • 用户管理

登录

  • 问题1:自定义响应体
  • drf-jwt包中的登录视图默认只返回token,而前端需要user_id,username
  • 实现:1.自定义响应方法;2.配置
  • 问题2:自定义载荷
    • 思路:读文档
    • 实现:1.自定义载荷方法;2.配置
  • 问题3:自定义验证
    • 思路:读源码
    • 结论:drf-jwt的登录视图与前台登录使用同一个方法
    • 路线:路由===》视图类===》post===》序列化器===》验证方法===》authenticate
    • 实现:判断,查询,对比密码
    • 提示:查询时加入is_staff=True条件

数据统计

用户总数统计

class 名称View(APIView)
  #指定管理员权限
  def get(self,request)
  总数 = User.objects.filter(is_staff=Flase).count()
  #看文档返回什么格式 以及数据
  return Response({
          'count':count,
          'date':datetime.today()
   });

日增用户统计

class 名称View(APIView):
	def get(self,request):
	# 统计今天注册的用户
	today = date.today()# 年-月-日 0:0:0
	# 条件:注册时间大于等于今天 date_joined 记录创建账户时间
	 count = User.objects.filter(date_joined__gte=today, is_staff=False).count()
	#看文档返回什么格式 以及数据
	return Response({
            'count': count,
            'date': today
        })

日活跃用户

class 名称View(View):
	def get(self,request):
	# 日活跃用户
       today = date.today()
        # 条件:今天登录的用户
        count = User.objects.filter(is_staff=False, last_login__gte=today).count()

        return Response({
            'count': count,
            'date': today
        })
	

日下单用户

class 名称View(View):
	def get(self,request):
	     # 日下单用户量统计
        today = date.today()
        # 统计用户个数,条件是今天下过订单的用户
        # 注意:在OrderInfo模型类中,为外键user添加参数related_name='orders',
        # select count(*) from (select DISTINCT a.* from tb_users as a inner join tb_order_info b on a.id=b.user_id  where b.create_time>='2019-11-24') b2
        count = User.objects.filter(orders__create_time__gte=today).distinct().count()

        return Response({
            'count': count,
            'date': today
        })

月增用户

class 名称View(View):
	def get(self,request):
	        # 月增用户统计
        # 说明:统计最近一个月(30天)中每天新增的用户数量[{日期,数量},{},...]
        count_list = []
        today = date.today()  # 2019-11-24
        # for i in range(29,-1,-1):#[30,29,28,...]
        for i in range(30):
            date_begin = today - timedelta(days=29 - i)  # 2019-10-26
            date_end = date_begin + timedelta(days=1)  # 2019-10-27

            # 统计第i天注册的用户量
            # 条件:大于当天0时0分0秒,小于第二天0时0分0秒
            count = User.objects.filter(is_staff=False, date_joined__gte=date_begin, date_joined__lt=date_end).count()

            count_list.append({
                'count': count,
                'date': date_begin
            })

        return Response(count_list)

日分类商品

方法①
 class GoodsView(APIView):
    def get(self, request):
         # 日分类商品访问量:查询表中的数据,输出给客户端
         today = date.today()
         queryset = GoodsVisitCount.objects.filter(date=today)
         # 遍历,将对象转字典
         visit_list = []
         for visit in queryset:
             visit_list.append({
                 'category': visit.category.name,
                 'count': visit.count
             })
         # 响应
         return Response(visit_list)
方法②
class GoodsView(ListAPIView):
    queryset = GoodsVisitCount.objects.filter(date=date.today())
    serializer_class = statistical.VisitSerializer

# statistical.py
from rest_framework import serializers
class VisitSerializer(serializers.Serializer):
    category = serializers.StringRelatedField(read_only=True)
    count = serializers.IntegerField()

查询

  • 查询
    • 定义视图类,继承
    • 定义序列化器类,继承
    • 配置路由规则
    • 修改模板语言
  • 过滤
    • 1.接收:从查询参数中接收关键字
    • 2.修改filter方法
    • 说明:
      • 如果需要从请求报文中获取数据,拼接条件则使用方法get_queryset()
      • 如果不需要从请求报文中获取条件数据,则使用属性queryset
  • 分页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值