You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DjangoBlog/servermanager/api/blogapi.py

28 lines
1.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from haystack.query import SearchQuerySet
from blog.models import Article, Category
class BlogApi:
def __init__(self):
self.searchqueryset = SearchQuerySet() # 初始化搜索查询集,用于处理文章搜索功能
self.searchqueryset.auto_query('') # 执行空查询,初始化搜索结果集(可能用于后续叠加过滤条件)
self.__max_takecount__ = 8 # 定义私有变量限制各类查询的最大返回数量为8条
def search_articles(self, query):
sqs = self.searchqueryset.auto_query(query) # 使用搜索查询集执行自动查询(可能包含分词、过滤等处理)
sqs = sqs.load_all() # 预加载所有关联数据,减少数据库查询次数(优化性能)
return sqs[:self.__max_takecount__] # 限制返回结果数量返回前N条匹配的文章
def get_category_lists(self):
return Category.objects.all() # 返回所有分类对象(未限制数量,通常分类数量较少)
def get_category_articles(self, categoryname):
articles = Article.objects.filter(category__name=categoryname) # 过滤出指定分类下的所有文章(通过外键关联查询)
if articles:
return articles[:self.__max_takecount__]
return None # 若存在符合条件的文章返回前N条否则返回None
def get_recent_articles(self):
return Article.objects.all()[:self.__max_takecount__]
# 返回所有文章的前N条依赖于Article模型的默认排序设置