Update blogapi.py

master
zxc 4 months ago
parent 59810b588d
commit 4e8ad15d2f

@ -5,23 +5,51 @@ from blog.models import Article, Category
class BlogApi:
def __init__(self):
# 初始化Haystack的搜索查询集SearchQuerySet
self.searchqueryset = SearchQuerySet()
# 执行空关键词自动查询,初始化查询集(无实际筛选,仅构建基础查询对象)
self.searchqueryset.auto_query('')
# 定义默认最大返回数量最多返回8条数据
self.__max_takecount__ = 8
def search_articles(self, query):
"""
根据关键词搜索文章
:param query: 搜索关键词
:return: 匹配的文章查询集最多8条
"""
# 基于关键词执行自动查询Haystack会处理分词、索引匹配等逻辑
sqs = self.searchqueryset.auto_query(query)
# 加载关联的完整模型数据(避免后续访问关联字段时触发额外数据库查询)
sqs = sqs.load_all()
# 返回前N条结果N=__max_takecount__
return sqs[:self.__max_takecount__]
def get_category_lists(self):
"""
获取所有文章分类
:return: 所有Category模型对象的查询集
"""
# 查询并返回所有分类(无数量限制,因分类通常数量较少)
return Category.objects.all()
def get_category_articles(self, categoryname):
"""
根据分类名称获取该分类下的文章
:param categoryname: 分类名称
:return: 该分类下的文章查询集最多8条无匹配时返回None
"""
# 筛选分类名称匹配的文章通过外键category关联查询
articles = Article.objects.filter(category__name=categoryname)
# 若有匹配文章返回前8条无匹配则返回None
if articles:
return articles[:self.__max_takecount__]
return None
def get_recent_articles(self):
return Article.objects.all()[:self.__max_takecount__]
"""
获取最新发布的文章
:return: 最新的文章查询集最多8条
"""
# 查询所有文章默认按主键降序通常主键自增等价于按发布时间降序返回前8条
return Article.objects.all()[:self.__max_takecount__]
Loading…
Cancel
Save