import logging from django.http import JsonResponse from django.db.models import Q from blog.models import Article, Category logger = logging.getLogger(__name__) class BlogApi: def __init__(self): self.searchqueryset = Article.objects.all() def search_articles(self, query): if query: # 使用 Q 对象进行多字段搜索 results = Article.objects.filter( Q(title__icontains=query) | Q(body__icontains=query) | Q(category__name__icontains=query) | Q(tags__name__icontains=query) ).filter(status='p') # 只搜索已发布的文章 return results.distinct()[:self.__max_takecount__] return Article.objects.none() def get_category_lists(self): return Category.objects.all() def get_category_articles(self, categoryname): articles = Article.objects.filter(category__name=categoryname,status='p') if articles: return articles[:self.__max_takecount__] return None def get_recent_articles(self): return Article.objects.filter( status='p' ).order_by('-pub_time')[:self.__max_takecount__] def get_popular_articles(self): """获取热门文章(按浏览量排序)""" return Article.objects.filter( status='p' ).order_by('-views')[:self.__max_takecount__]