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.
django/servermanager/api/blogapi.py

74 lines
2.0 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
# hz代码注释
from haystack.query import SearchQuerySet
from blog.models import Article, Category
class BlogApi:
"""
博客API类提供文章搜索、分类获取等相关功能
Attributes:
searchqueryset (SearchQuerySet): 搜索查询集对象
__max_takecount__ (int): 最大返回记录数默认为8
"""
def __init__(self):
"""
初始化BlogApi实例
"""
self.searchqueryset = SearchQuerySet()
self.searchqueryset.auto_query('')
self.__max_takecount__ = 8
def search_articles(self, query):
"""
根据查询关键字搜索文章
Args:
query (str): 搜索关键字
Returns:
list: 匹配的文章列表最多返回__max_takecount__条记录
"""
sqs = self.searchqueryset.auto_query(query)
sqs = sqs.load_all()
return sqs[:self.__max_takecount__]
def get_category_lists(self):
"""
获取所有文章分类列表
Returns:
QuerySet: 所有分类对象的查询集
"""
return Category.objects.all()
def get_category_articles(self, categoryname):
"""
根据分类名称获取该分类下的文章列表
Args:
categoryname (str): 分类名称
Returns:
QuerySet or None: 指定分类下的文章查询集最多返回__max_takecount__条记录
如果没有找到相关文章则返回None
"""
articles = Article.objects.filter(category__name=categoryname)
if articles:
return articles[:self.__max_takecount__]
return None
def get_recent_articles(self):
"""
获取最近发布的文章列表
Returns:
QuerySet: 最近发布的文章查询集最多返回__max_takecount__条记录
"""
return Article.objects.all()[:self.__max_takecount__]