flask完成分页、查询过滤、时间过滤接口

@staff_bl.route('/list', methods=['GET'])
def staff_list():
    page = request.args.get('page', 1, type=int)
    page_size = request.args.get('pageSize', 10, type=int)
    department_id = request.args.get('department_id')
    realname = request.args.get('realname')
    date_joined = request.args.get('date_joined')

    filter_attr = {}
    if department_id:
        filter_attr['department_id'] = department_id
    if realname:
        filter_attr['realname'] = realname
    try:
        query = User.query.filter_by(**filter_attr)

        # 过滤日期范围
        if date_joined:
            try:
                # 将字符串日期转换为 datetime 对象
                # list(eval(date_joined)将字符串转化为list
                start_date = datetime.strptime(list(eval(date_joined))[0], '%Y-%m-%d')
                end_date = datetime.strptime(list(eval(date_joined))[1], '%Y-%m-%d')
                # 设置 end_date 为当天的 23:59:59
                end_date = end_date.replace(hour=23, minute=59, second=59)

                # 过滤 date_joined 在指定日期范围内的记录
                query = query.filter(User.date_joined.between(start_date, end_date))
            except ValueError as e:
                print(e)
                return my_response(code=400, msg="日期格式错误,正确格式为 YYYY-MM-DD")

        paginated_query = query.paginate(page=page, per_page=page_size, error_out=False)
        # 序列化数据
        staffs_list = staff_out_schema.dump(paginated_query.items, many=True)

        # 返回分页信息
        return my_response(
            code=200,
            msg='获取员工列表成功!',
            data={
                'items': staffs_list,  # 当前页数据
                'total': paginated_query.total,  # 总记录数
                'pages': paginated_query.pages,  # 总页数
                'current_page': paginated_query.page,  # 当前页
            }
        )
    except Exception as e:
        return my_response(code=500, msg=str(e))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值