|
|
import logging # mk:导入日志记录模块#
|
|
|
|
|
|
from django.utils import timezone # mk:导入Django的时间工具模块#
|
|
|
|
|
|
from djangoblog.utils import cache, get_blog_setting # mk:从项目工具模块导入缓存和获取博客设置的函数#
|
|
|
from .models import Category, Article # mk:从当前应用的模型中导入分类和文章模型#
|
|
|
|
|
|
logger = logging.getLogger(__name__) # mk:创建当前模块的日志记录器#
|
|
|
|
|
|
|
|
|
def seo_processor(requests): # mk:SEO处理器函数,用于获取网站SEO相关配置信息并缓存#
|
|
|
"""
|
|
|
SEO处理器函数,用于获取网站SEO相关配置信息并缓存
|
|
|
|
|
|
该函数从缓存中获取SEO配置信息,如果缓存不存在则从数据库获取并设置缓存。
|
|
|
主要包含网站基本信息、SEO配置、导航分类列表、页面列表等数据。
|
|
|
|
|
|
Args:
|
|
|
requests: HTTP请求对象,用于获取请求协议和主机信息
|
|
|
|
|
|
Returns:
|
|
|
dict: 包含SEO配置信息的字典,具体包含:
|
|
|
- SITE_NAME: 网站名称
|
|
|
- SHOW_GOOGLE_ADSENSE: 是否显示Google Adsense
|
|
|
- GOOGLE_ADSENSE_CODES: Google Adsense代码
|
|
|
- SITE_SEO_DESCRIPTION: 网站SEO描述
|
|
|
- SITE_DESCRIPTION: 网站描述
|
|
|
- SITE_KEYWORDS: 网站关键词
|
|
|
- SITE_BASE_URL: 网站基础URL
|
|
|
- ARTICLE_SUB_LENGTH: 文章摘要长度
|
|
|
- nav_category_list: 导航分类列表
|
|
|
- nav_pages: 导航页面列表
|
|
|
- OPEN_SITE_COMMENT: 是否开启网站评论
|
|
|
- BEIAN_CODE: 备案号
|
|
|
- ANALYTICS_CODE: 统计代码
|
|
|
- BEIAN_CODE_GONGAN: 公安备案号
|
|
|
- SHOW_GONGAN_CODE: 是否显示公安备案号
|
|
|
- CURRENT_YEAR: 当前年份
|
|
|
- GLOBAL_HEADER: 全局头部代码
|
|
|
- GLOBAL_FOOTER: 全局底部代码
|
|
|
- COMMENT_NEED_REVIEW: 评论是否需要审核
|
|
|
"""
|
|
|
key = 'seo_processor' # mk:设置缓存键名#
|
|
|
value = cache.get(key) # mk:尝试从缓存中获取SEO数据#
|
|
|
# mk:检查缓存是否存在,如果存在则直接返回缓存数据#
|
|
|
if value:
|
|
|
return value
|
|
|
else:
|
|
|
logger.info('set processor cache.') # mk:记录设置缓存的日志信息#
|
|
|
# mk:缓存不存在,从数据库获取配置信息#
|
|
|
setting = get_blog_setting()
|
|
|
value = { # mk:构建包含网站SEO配置和导航数据的字典对象#
|
|
|
'SITE_NAME': setting.site_name, # mk:网站名称,显示在网页标题等位置#
|
|
|
'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, # mk:是否显示Google Adsense广告的开关#
|
|
|
'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, # mk:Google Adsense广告代码内容#
|
|
|
'SITE_SEO_DESCRIPTION': setting.site_seo_description, # mk:网站SEO描述信息,用于meta标签#
|
|
|
'SITE_DESCRIPTION': setting.site_description, # mk:网站描述信息#
|
|
|
'SITE_KEYWORDS': setting.site_keywords, # mk:网站关键词,用于SEO优化#
|
|
|
'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/', # mk:网站基础URL地址,由请求协议和主机名组成#
|
|
|
'ARTICLE_SUB_LENGTH': setting.article_sub_length, # mk:文章摘要显示长度设置#
|
|
|
'nav_category_list': Category.objects.all(), # mk:获取所有文章分类,用于导航菜单显示#
|
|
|
'nav_pages': Article.objects.filter( # mk:获取所有已发布的页面文章,用于导航菜单显示#
|
|
|
type='p',
|
|
|
status='p'),
|
|
|
'OPEN_SITE_COMMENT': setting.open_site_comment, # mk:网站评论功能开关设置#
|
|
|
'BEIAN_CODE': setting.beian_code, # mk:网站备案号信息#
|
|
|
'ANALYTICS_CODE': setting.analytics_code, # mk:网站统计分析代码#
|
|
|
"BEIAN_CODE_GONGAN": setting.gongan_beiancode, # mk:公安备案号信息#
|
|
|
"SHOW_GONGAN_CODE": setting.show_gongan_code, # mk:是否显示公安备案信息的开关#
|
|
|
"CURRENT_YEAR": timezone.now().year, # mk:当前年份,用于页面底部显示版权年份#
|
|
|
"GLOBAL_HEADER": setting.global_header, # mk:全局页头HTML代码#
|
|
|
"GLOBAL_FOOTER": setting.global_footer, # mk:全局页脚HTML代码#
|
|
|
"COMMENT_NEED_REVIEW": setting.comment_need_review, # mk:评论是否需要审核的设置#
|
|
|
}
|
|
|
# mk:将获取到的数据缓存10小时,减少数据库查询压力#
|
|
|
cache.set(key, value, 60 * 60 * 10)
|
|
|
return value # mk:返回构建的SEO和导航数据# |