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.
tentest/doc/DjangoBlog/blog/context_processors.py

77 lines
4.6 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.

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): # mkSEO处理器函数用于获取网站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, # mkGoogle 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和导航数据#