From 54ad21b952eb8cc6787b1a036380dc20ccdd58d3 Mon Sep 17 00:00:00 2001 From: jlj <3042504846@qq.com> Date: Tue, 10 Jun 2025 15:43:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/daren_detail/views.py | 177 ------------------------------------- 1 file changed, 177 deletions(-) diff --git a/apps/daren_detail/views.py b/apps/daren_detail/views.py index 5bbf0ff..0fe20ee 100644 --- a/apps/daren_detail/views.py +++ b/apps/daren_detail/views.py @@ -37,183 +37,6 @@ monitor_thread = None is_monitoring = False -@api_view(['POST']) -@authentication_classes([CustomTokenAuthentication]) -@csrf_exempt -@require_http_methods(["POST"]) -def filter_creators(request): - """根据过滤条件筛选达人信息(POST版,分页参数在URL中)""" - try: - import json - - # 从URL获取分页参数 - page = int(request.GET.get('page', 1)) - page_size = 10 # 固定页面大小为10条数据 - - # 解析POST请求体 - data = json.loads(request.body) - filter_data = data.get('filter', {}) - - # 基础查询 - query = CreatorProfile.objects.all() - - # Category 多选过滤 - category = filter_data.get('category') - if category and len(category) > 0: - query = query.filter(category__in=category) - - # 电商能力等级过滤 (L1-L7),多选 - e_commerce_level = filter_data.get('e_commerce_level') - if e_commerce_level and len(e_commerce_level) > 0: - level_nums = [] - for level_str in e_commerce_level: - if level_str.startswith('L'): - level_nums.append(int(level_str[1:])) - if level_nums: - query = query.filter(e_commerce_level__in=level_nums) - - # 曝光等级过滤 (KOL-1, KOL-2, KOC-1等),多选 - exposure_level = filter_data.get('exposure_level') - if exposure_level and len(exposure_level) > 0: - query = query.filter(exposure_level__in=exposure_level) - - # GMV范围过滤 ($0-$5k, $5k-$25k, $25k-$50k等),多选 - gmv_range = filter_data.get('gmv_range') - if gmv_range and len(gmv_range) > 0: - gmv_q = Q() - for gmv_val in gmv_range: - gmv_min, gmv_max = 0, float('inf') - if gmv_val == "$0-$5k": - gmv_min, gmv_max = 0, 5 - elif gmv_val == "$5k-$25k": - gmv_min, gmv_max = 5, 25 - elif gmv_val == "$25k-$50k": - gmv_min, gmv_max = 25, 50 - elif gmv_val == "$50k-$150k": - gmv_min, gmv_max = 50, 150 - elif gmv_val == "$150k-$400k": - gmv_min, gmv_max = 150, 400 - elif gmv_val == "$400k-$1500k": - gmv_min, gmv_max = 400, 1500 - elif gmv_val == "$1500k+": - gmv_min, gmv_max = 1500, float('inf') - - range_q = Q() - if gmv_min > 0: - range_q &= Q(gmv__gte=gmv_min) - if gmv_max < float('inf'): - range_q &= Q(gmv__lte=gmv_max) - gmv_q |= range_q - - query = query.filter(gmv_q) - - # 观看量范围过滤,单选 - views_range = filter_data.get('views_range') - if views_range and len(views_range) > 0: - views_min, views_max = 0, float('inf') - views_val = views_range[0] - if views_val == "0-100": - views_min, views_max = 0, 100 - elif views_val == "1k-10k": - views_min, views_max = 1000, 10000 - elif views_val == "10k-100k": - views_min, views_max = 10000, 100000 - elif views_val == "100k-250k": - views_min, views_max = 100000, 250000 - elif views_val == "250k-500k": - views_min, views_max = 250000, 500000 - elif views_val == "500k+": - views_min = 500000 - - if views_min > 0: - query = query.filter(avg_video_views__gte=views_min) - if views_max < float('inf'): - query = query.filter(avg_video_views__lte=views_max) - - # 价格区间过滤逻辑,单选 - pricing = filter_data.get('pricing') - if pricing and len(pricing) > 0: - pricing_val = pricing[0] - if '-' in pricing_val: - min_price, max_price = pricing_val.split('-') - min_price = float(min_price) - max_price = float(max_price) - # 修改:根据单一定价字段判断是否在区间内 - query = query.filter(pricing__gte=min_price, pricing__lte=max_price) - - # 获取总数据量 - total_count = query.count() - - # 计算分页 - start = (page - 1) * page_size - end = start + page_size - - # 执行查询并分页 - creators = query[start:end] - - creator_list = [] - for creator in creators: - # 格式化电商等级 - e_commerce_level_formatted = f"L{creator.e_commerce_level}" if creator.e_commerce_level else None - - # 格式化GMV - gmv_formatted = f"${creator.gmv}k" if creator.gmv else "$0" - - # 格式化粉丝数和观看量 - followers_formatted = f"{int(creator.followers / 1000)}k" if creator.followers else "0" - avg_views_formatted = f"{int(creator.avg_video_views / 1000)}k" if creator.avg_video_views else "0" - - # 格式化价格 - pricing_formatted = f"${creator.pricing}" if creator.pricing else None - - # 格式化结果 - formatted_creator = { - "Creator": { - "name": creator.name, - "avatar": creator.get_avatar_url() - }, - "Category": creator.category, - "E-commerce Level": e_commerce_level_formatted, - "Exposure Level": creator.exposure_level, - "Followers": followers_formatted, - "GMV": gmv_formatted, - "Items Sold": f"{creator.items_sold}k" if creator.items_sold else None, - "Avg. Video Views": avg_views_formatted, - "Pricing": pricing_formatted, - "Pricing Package": creator.pricing_package, - "# Collab": creator.collab_count, - "Latest Collab.": creator.latest_collab, - "E-commerce": creator.e_commerce_platforms, - } - creator_list.append(formatted_creator) - - # 计算总页数 - total_pages = (total_count + page_size - 1) // page_size - - # 修改响应格式为code、message和data - return JsonResponse({ - 'code': 200, - 'message': '获取成功', - 'data': { - 'total_count': total_count, - 'total_pages': total_pages, - 'current_page': page, - 'page_size': page_size, - 'count': len(creator_list), - 'creators': creator_list - } - }, json_dumps_params={'ensure_ascii': False}) - - except Exception as e: - logger.error(f"筛选达人信息失败: {e}") - import traceback - logger.error(f"详细错误: {traceback.format_exc()}") - return JsonResponse({ - 'code': 500, - 'message': f'筛选达人信息失败: {str(e)}', - 'data': None - }, json_dumps_params={'ensure_ascii': False}) - @api_view(['POST']) @authentication_classes([CustomTokenAuthentication])