diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/context_processors.py b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/context_processors.py index 73e3088..4a62f34 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/context_processors.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/context_processors.py @@ -1,43 +1,88 @@ +# 导入日志模块,用于记录系统运行时的信息和错误 import logging +# 导入Django的时间工具,用于获取当前时间 from django.utils import timezone +# 导入自定义工具:缓存工具和获取博客设置的方法 from djangoblog.utils import cache, get_blog_setting +# 导入当前应用的模型:分类和文章模型 from .models import Category, Article +# 创建日志记录器,用于记录当前模块的日志信息 logger = logging.getLogger(__name__) def seo_processor(requests): + """ + 自定义上下文处理器:用于在所有模板中全局共享SEO相关的配置和数据 + 上下文处理器会在每次请求时被调用,返回的字典会自动注入到所有模板中 + + Args: + requests: HttpRequest对象,包含当前请求的信息(如协议、主机等) + + Returns: + dict: 包含网站配置、导航数据等的字典,供模板全局使用 + """ + # 定义缓存键,用于标识当前处理器的缓存数据 key = 'seo_processor' + # 尝试从缓存中获取数据,减少数据库查询和计算开销 value = cache.get(key) + + # 如果缓存中存在数据,直接返回缓存内容 if value: return value else: + # 缓存未命中时,记录日志并重新计算数据 logger.info('set processor cache.') + # 获取博客的全局设置(从数据库或其他配置源) setting = get_blog_setting() + + # 构建需要返回给模板的数据集 value = { + # 网站名称(用于页面标题等) 'SITE_NAME': setting.site_name, + # 是否显示谷歌广告 'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, + # 谷歌广告代码 'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, + # 网站SEO描述(用于meta标签) 'SITE_SEO_DESCRIPTION': setting.site_seo_description, + # 网站描述(用于页面展示) 'SITE_DESCRIPTION': setting.site_description, + # 网站关键词(用于meta标签,提升SEO) 'SITE_KEYWORDS': setting.site_keywords, + # 网站基础URL(协议+域名,如https://example.com/) 'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/', + # 文章摘要长度(用于列表页显示) 'ARTICLE_SUB_LENGTH': setting.article_sub_length, + # 导航栏显示的分类列表(从数据库查询所有分类) 'nav_category_list': Category.objects.all(), + # 导航栏显示的页面列表(筛选类型为"页面"且状态为"已发布"的文章) 'nav_pages': Article.objects.filter( - type='p', - status='p'), + type='p', # 'p'表示页面(page),区别于普通文章(article) + status='p'), # 'p'表示已发布(published) + # 是否开启网站评论功能 'OPEN_SITE_COMMENT': setting.open_site_comment, + # 网站备案号 'BEIAN_CODE': setting.beian_code, + # 网站统计代码(如百度统计、Google Analytics) 'ANALYTICS_CODE': setting.analytics_code, + # 公安备案号 "BEIAN_CODE_GONGAN": setting.gongan_beiancode, + # 是否显示公安备案号 "SHOW_GONGAN_CODE": setting.show_gongan_code, + # 当前年份(用于页脚版权信息等) "CURRENT_YEAR": timezone.now().year, + # 全局页头代码(如自定义CSS、JS) "GLOBAL_HEADER": setting.global_header, + # 全局页脚代码 "GLOBAL_FOOTER": setting.global_footer, + # 评论是否需要审核后才显示 "COMMENT_NEED_REVIEW": setting.comment_need_review, } + + # 将数据存入缓存,有效期为10小时(60秒*60分*10小时) + # 减少重复计算和数据库查询,提升性能 cache.set(key, value, 60 * 60 * 10) - return value + return value \ No newline at end of file