From 29a63e1e98c428fc13e20196a9809d0414782137 Mon Sep 17 00:00:00 2001 From: ymq <2832214169@qq.com> Date: Sat, 18 Oct 2025 16:03:07 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=AC=AC=E4=BA=94=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...业-软件数据模型设计说明书.docx | Bin 0 -> 118354 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/第五周作业-软件数据模型设计说明书.docx diff --git a/doc/第五周作业-软件数据模型设计说明书.docx b/doc/第五周作业-软件数据模型设计说明书.docx new file mode 100644 index 0000000000000000000000000000000000000000..86dbe169da3d2e6b035f9f167eb6530e24fbfb82 GIT binary patch literal 118354 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

59ks3 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 literal 0 HcmV?d00001 From 316cf170368b4f35176ccba345d83beca1f820fb Mon Sep 17 00:00:00 2001 From: ymq <2832214169@qq.com> Date: Sat, 18 Oct 2025 16:04:38 +0800 Subject: [PATCH 2/4] delete --- doc/说明文档.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/说明文档.md diff --git a/doc/说明文档.md b/doc/说明文档.md deleted file mode 100644 index e69de29..0000000 From ee8626220b914e9a58e33c7d9a260b9f15977f7e Mon Sep 17 00:00:00 2001 From: ymq <2832214169@qq.com> Date: Sun, 26 Oct 2025 19:58:08 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=AC=AC=E5=85=AD=E5=91=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/个人.docx | Bin 0 -> 227575 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/个人.docx diff --git a/doc/个人.docx b/doc/个人.docx new file mode 100644 index 0000000000000000000000000000000000000000..fe719de55bbea53db043ef9113582893259a3216 GIT binary patch literal 227575 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

hZm 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

  • J#A|FJ@v|B4wr*9}DoMGOqYHWXEw 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 Date: Sat, 8 Nov 2025 11:50:39 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=89=B9=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/django-master/blog/admin.py | 63 ++++- src/django-master/blog/apps.py | 4 +- src/django-master/blog/context_processors.py | 56 +++-- src/django-master/blog/documents.py | 140 +++++++---- src/django-master/blog/forms.py | 13 + .../blog/management/commands/build_index.py | 13 + .../management/commands/build_search_words.py | 9 +- .../blog/management/commands/clear_cache.py | 8 +- .../management/commands/create_testdata.py | 32 ++- .../blog/management/commands/ping_baidu.py | 31 ++- .../management/commands/sync_user_avatar.py | 45 +++- src/django-master/blog/middleware.py | 44 +++- .../blog/migrations/0001_initial.py | 37 ++- ...002_blogsettings_global_footer_and_more.py | 13 +- .../0003_blogsettings_comment_need_review.py | 16 +- ...de_blogsettings_analytics_code_and_more.py | 24 +- ...options_alter_category_options_and_more.py | 25 +- .../0006_alter_blogsettings_options.py | 8 +- src/django-master/blog/models.py | 223 ++++++++++-------- src/django-master/blog/search_indexes.py | 9 +- .../blog/templatetags/blog_tags.py | 51 ++-- src/django-master/blog/tests.py | 203 ++++++++++------ src/django-master/blog/urls.py | 32 ++- src/django-master/blog/views.py | 193 +++++++++------ 24 files changed, 919 insertions(+), 373 deletions(-) diff --git a/src/django-master/blog/admin.py b/src/django-master/blog/admin.py index 46c3420..c637bfc 100644 --- a/src/django-master/blog/admin.py +++ b/src/django-master/blog/admin.py @@ -1,48 +1,76 @@ from django import forms +#ymq:导入Django的forms模块,用于创建表单 from django.contrib import admin +#ymq:导入Django的admin模块,用于后台管理配置 from django.contrib.auth import get_user_model +#ymq:导入获取用户模型的函数,便于灵活引用用户模型 from django.urls import reverse +#ymq:导入reverse函数,用于生成URL反向解析 from django.utils.html import format_html +#ymq:导入format_html函数,用于安全生成HTML内容 from django.utils.translation import gettext_lazy as _ +#ymq:导入国际化翻译函数,将文本标记为可翻译 # Register your models here. from .models import Article +#ymq:从当前应用的models模块导入Article模型 class ArticleForm(forms.ModelForm): + #ymq:定义Article模型对应的表单类,继承自ModelForm # body = forms.CharField(widget=AdminPagedownWidget()) + #ymq:注释掉的代码,原本计划为body字段使用AdminPagedownWidget编辑器 class Meta: + #ymq:Meta类用于配置表单元数据 model = Article + #ymq:指定表单关联的模型为Article fields = '__all__' + #ymq:指定表单包含模型的所有字段 def makr_article_publish(modeladmin, request, queryset): + #ymq:定义批量发布文章的动作函数 queryset.update(status='p') + #ymq:将选中的文章状态更新为'p'(发布状态) def draft_article(modeladmin, request, queryset): + #ymq:定义批量设为草稿的动作函数 queryset.update(status='d') + #ymq:将选中的文章状态更新为'd'(草稿状态) def close_article_commentstatus(modeladmin, request, queryset): + #ymq:定义批量关闭评论的动作函数 queryset.update(comment_status='c') + #ymq:将选中的文章评论状态更新为'c'(关闭状态) def open_article_commentstatus(modeladmin, request, queryset): + #ymq:定义批量开启评论的动作函数 queryset.update(comment_status='o') + #ymq:将选中的文章评论状态更新为'o'(开启状态) makr_article_publish.short_description = _('Publish selected articles') +#ymq:设置发布动作在admin中的显示名称(支持国际化) draft_article.short_description = _('Draft selected articles') +#ymq:设置草稿动作在admin中的显示名称(支持国际化) close_article_commentstatus.short_description = _('Close article comments') +#ymq:设置关闭评论动作在admin中的显示名称(支持国际化) open_article_commentstatus.short_description = _('Open article comments') +#ymq:设置开启评论动作在admin中的显示名称(支持国际化) class ArticlelAdmin(admin.ModelAdmin): + #ymq:定义Article模型的admin管理类,继承自ModelAdmin list_per_page = 20 + #ymq:设置每页显示20条记录 search_fields = ('body', 'title') + #ymq:设置可搜索的字段为body和title form = ArticleForm + #ymq:指定使用自定义的ArticleForm表单 list_display = ( 'id', 'title', @@ -53,60 +81,93 @@ class ArticlelAdmin(admin.ModelAdmin): 'status', 'type', 'article_order') + #ymq:设置列表页显示的字段 list_display_links = ('id', 'title') + #ymq:设置列表页中可点击跳转编辑页的字段 list_filter = ('status', 'type', 'category') + #ymq:设置可用于筛选的字段 filter_horizontal = ('tags',) + #ymq:设置多对多字段的水平筛选器(tags字段) exclude = ('creation_time', 'last_modify_time') + #ymq:设置编辑页中排除的字段(不显示) view_on_site = True + #ymq:启用"在站点上查看"功能 actions = [ makr_article_publish, draft_article, close_article_commentstatus, open_article_commentstatus] + #ymq:注册批量操作动作 def link_to_category(self, obj): + #ymq:自定义列表页中分类字段的显示方式(转为链接) info = (obj.category._meta.app_label, obj.category._meta.model_name) + #ymq:获取分类模型的应用标签和模型名称 link = reverse('admin:%s_%s_change' % info, args=(obj.category.id,)) + #ymq:生成分类的编辑页URL return format_html(u'%s' % (link, obj.category.name)) + #ymq:返回HTML链接,点击可跳转到分类编辑页 link_to_category.short_description = _('category') + #ymq:设置自定义字段在列表页的显示名称(支持国际化) def get_form(self, request, obj=None, **kwargs): - form = super(ArticlelAdmin, self).get_form(request, obj, **kwargs) + #ymq:重写获取表单的方法,自定义表单字段 + form = super(ArticlelAdmin, self).get_form(request, obj,** kwargs) + #ymq:调用父类方法获取表单 form.base_fields['author'].queryset = get_user_model( ).objects.filter(is_superuser=True) + #ymq:限制作者字段只能选择超级用户 return form + #ymq:返回修改后的表单 def save_model(self, request, obj, form, change): + #ymq:重写保存模型的方法(可在此添加自定义保存逻辑) super(ArticlelAdmin, self).save_model(request, obj, form, change) + #ymq:调用父类的保存方法完成默认保存 def get_view_on_site_url(self, obj=None): + #ymq:重写"在站点上查看"的URL生成方法 if obj: + #ymq:如果有具体对象,返回对象的完整URL url = obj.get_full_url() return url else: + #ymq:如果无对象,返回当前站点域名 from djangoblog.utils import get_current_site site = get_current_site().domain return site class TagAdmin(admin.ModelAdmin): + #ymq:定义Tag模型的admin管理类 exclude = ('slug', 'last_mod_time', 'creation_time') + #ymq:编辑页排除slug、最后修改时间和创建时间字段 class CategoryAdmin(admin.ModelAdmin): + #ymq:定义Category模型的admin管理类 list_display = ('name', 'parent_category', 'index') + #ymq:列表页显示名称、父分类和排序索引字段 exclude = ('slug', 'last_mod_time', 'creation_time') + #ymq:编辑页排除slug、最后修改时间和创建时间字段 class LinksAdmin(admin.ModelAdmin): + #ymq:定义Links模型的admin管理类 exclude = ('last_mod_time', 'creation_time') + #ymq:编辑页排除最后修改时间和创建时间字段 class SideBarAdmin(admin.ModelAdmin): + #ymq:定义SideBar模型的admin管理类 list_display = ('name', 'content', 'is_enable', 'sequence') + #ymq:列表页显示名称、内容、是否启用和排序序号字段 exclude = ('last_mod_time', 'creation_time') + #ymq:编辑页排除最后修改时间和创建时间字段 class BlogSettingsAdmin(admin.ModelAdmin): + #ymq:定义BlogSettings模型的admin管理类 pass + #ymq:暂未设置特殊配置,使用默认admin行为 \ No newline at end of file diff --git a/src/django-master/blog/apps.py b/src/django-master/blog/apps.py index 7930587..d7e57a1 100644 --- a/src/django-master/blog/apps.py +++ b/src/django-master/blog/apps.py @@ -1,5 +1,7 @@ from django.apps import AppConfig - +#ymq:导入Django的AppConfig类,用于定义应用的配置信息 class BlogConfig(AppConfig): + #ymq:定义博客应用的配置类,继承自AppConfig name = 'blog' + #ymq:指定应用的名称为'blog',Django通过该名称识别此应用 \ No newline at end of file diff --git a/src/django-master/blog/context_processors.py b/src/django-master/blog/context_processors.py index 73e3088..ebe7d09 100644 --- a/src/django-master/blog/context_processors.py +++ b/src/django-master/blog/context_processors.py @@ -1,43 +1,65 @@ import logging +#ymq:导入logging模块,用于日志记录 from django.utils import timezone +#ymq:导入Django的timezone模块,用于处理时间相关操作 from djangoblog.utils import cache, get_blog_setting +#ymq:从项目工具模块导入缓存工具和获取博客设置的函数 from .models import Category, Article +#ymq:从当前应用的models模块导入分类和文章模型 logger = logging.getLogger(__name__) +#ymq:创建当前模块的日志记录器实例 def seo_processor(requests): + #ymq:定义SEO上下文处理器,用于向模板全局注入通用数据 key = 'seo_processor' + #ymq:缓存键名,用于标识当前处理器的缓存数据 value = cache.get(key) + #ymq:尝试从缓存中获取数据 + if value: + #ymq:如果缓存存在,直接返回缓存数据 return value else: + #ymq:如果缓存不存在,重新生成数据 logger.info('set processor cache.') + #ymq:记录日志,提示正在设置缓存 + setting = get_blog_setting() + #ymq:获取博客的全局设置信息 + + #ymq:构建需要传递给模板的上下文数据字典 value = { - 'SITE_NAME': setting.site_name, - 'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, - 'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, - 'SITE_SEO_DESCRIPTION': setting.site_seo_description, - 'SITE_DESCRIPTION': setting.site_description, - 'SITE_KEYWORDS': setting.site_keywords, + 'SITE_NAME': setting.site_name, # 网站名称 + 'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense, # 是否显示谷歌广告 + 'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes, # 谷歌广告代码 + 'SITE_SEO_DESCRIPTION': setting.site_seo_description, # 网站SEO描述 + 'SITE_DESCRIPTION': setting.site_description, # 网站描述 + 'SITE_KEYWORDS': setting.site_keywords, # 网站关键词 + # 网站基础URL(协议+域名) 'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/', - 'ARTICLE_SUB_LENGTH': setting.article_sub_length, - 'nav_category_list': Category.objects.all(), + 'ARTICLE_SUB_LENGTH': setting.article_sub_length, # 文章摘要长度 + 'nav_category_list': Category.objects.all(), # 导航分类列表 + # 导航页面列表(类型为页面且状态为已发布) 'nav_pages': Article.objects.filter( type='p', status='p'), - 'OPEN_SITE_COMMENT': setting.open_site_comment, - 'BEIAN_CODE': setting.beian_code, - 'ANALYTICS_CODE': setting.analytics_code, - "BEIAN_CODE_GONGAN": setting.gongan_beiancode, - "SHOW_GONGAN_CODE": setting.show_gongan_code, - "CURRENT_YEAR": timezone.now().year, - "GLOBAL_HEADER": setting.global_header, - "GLOBAL_FOOTER": setting.global_footer, - "COMMENT_NEED_REVIEW": setting.comment_need_review, + 'OPEN_SITE_COMMENT': setting.open_site_comment, # 是否开启网站评论 + 'BEIAN_CODE': setting.beian_code, # 网站备案号 + 'ANALYTICS_CODE': setting.analytics_code, # 统计分析代码 + "BEIAN_CODE_GONGAN": setting.gongan_beiancode, # 公安备案号 + "SHOW_GONGAN_CODE": setting.show_gongan_code, # 是否显示公安备案号 + "CURRENT_YEAR": timezone.now().year, # 当前年份(用于页脚等位置) + "GLOBAL_HEADER": setting.global_header, # 全局头部代码 + "GLOBAL_FOOTER": setting.global_footer, # 全局底部代码 + "COMMENT_NEED_REVIEW": setting.comment_need_review, # 评论是否需要审核 } + cache.set(key, value, 60 * 60 * 10) + #ymq:将生成的上下文数据存入缓存,有效期10小时(60秒*60分*10小时) + return value + #ymq:返回构建好的上下文数据字典 \ No newline at end of file diff --git a/src/django-master/blog/documents.py b/src/django-master/blog/documents.py index 0f1db7b..38db391 100644 --- a/src/django-master/blog/documents.py +++ b/src/django-master/blog/documents.py @@ -1,26 +1,37 @@ import time +#ymq:导入time模块,用于处理时间相关操作(如生成唯一ID) import elasticsearch.client +#ymq:导入elasticsearch客户端模块,用于操作Elasticsearch的Ingest API from django.conf import settings +#ymq:导入Django的settings模块,用于获取项目配置 from elasticsearch_dsl import Document, InnerDoc, Date, Integer, Long, Text, Object, GeoPoint, Keyword, Boolean +#ymq:导入elasticsearch-dsl相关类,用于定义Elasticsearch文档结构和字段类型 from elasticsearch_dsl.connections import connections +#ymq:导入elasticsearch-dsl的连接管理工具,用于创建与Elasticsearch的连接 from blog.models import Article +#ymq:从blog应用导入Article模型,用于同步数据到Elasticsearch +#ymq:判断是否启用Elasticsearch(检查settings中是否配置了ELASTICSEARCH_DSL) ELASTICSEARCH_ENABLED = hasattr(settings, 'ELASTICSEARCH_DSL') if ELASTICSEARCH_ENABLED: + #ymq:如果启用Elasticsearch,创建连接 connections.create_connection( hosts=[settings.ELASTICSEARCH_DSL['default']['hosts']]) from elasticsearch import Elasticsearch - + #ymq:创建Elasticsearch客户端实例 es = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts']) from elasticsearch.client import IngestClient + #ymq:创建Ingest客户端,用于管理数据处理管道 c = IngestClient(es) try: + #ymq:尝试获取名为'geoip'的管道,检查是否已存在 c.get_pipeline('geoip') except elasticsearch.exceptions.NotFoundError: + #ymq:如果管道不存在,则创建它(用于解析IP地址的地理位置信息) c.put_pipeline('geoip', body='''{ "description" : "Add geoip info", "processors" : [ @@ -34,72 +45,85 @@ if ELASTICSEARCH_ENABLED: class GeoIp(InnerDoc): - continent_name = Keyword() - country_iso_code = Keyword() - country_name = Keyword() - location = GeoPoint() + #ymq:定义地理位置信息的内部文档(嵌套结构) + continent_name = Keyword() # 大陆名称(关键字类型,不分词) + country_iso_code = Keyword() # 国家ISO代码(关键字类型) + country_name = Keyword() # 国家名称(关键字类型) + location = GeoPoint() # 地理位置坐标(经纬度) class UserAgentBrowser(InnerDoc): - Family = Keyword() - Version = Keyword() + #ymq:定义用户代理中浏览器信息的内部文档 + Family = Keyword() # 浏览器家族(如Chrome、Firefox) + Version = Keyword() # 浏览器版本 class UserAgentOS(UserAgentBrowser): + #ymq:定义用户代理中操作系统信息的内部文档(继承浏览器结构) pass class UserAgentDevice(InnerDoc): - Family = Keyword() - Brand = Keyword() - Model = Keyword() + #ymq:定义用户代理中设备信息的内部文档 + Family = Keyword() # 设备家族 + Brand = Keyword() # 设备品牌 + Model = Keyword() # 设备型号 class UserAgent(InnerDoc): - browser = Object(UserAgentBrowser, required=False) - os = Object(UserAgentOS, required=False) - device = Object(UserAgentDevice, required=False) - string = Text() - is_bot = Boolean() + #ymq:定义用户代理完整信息的内部文档(嵌套结构) + browser = Object(UserAgentBrowser, required=False) # 浏览器信息 + os = Object(UserAgentOS, required=False) # 操作系统信息 + device = Object(UserAgentDevice, required=False) # 设备信息 + string = Text() # 原始用户代理字符串 + is_bot = Boolean() # 是否为爬虫 class ElapsedTimeDocument(Document): - url = Keyword() - time_taken = Long() - log_datetime = Date() - ip = Keyword() - geoip = Object(GeoIp, required=False) - useragent = Object(UserAgent, required=False) + #ymq:定义用于记录性能耗时的Elasticsearch文档 + url = Keyword() # 访问的URL(关键字类型) + time_taken = Long() # 耗时(毫秒) + log_datetime = Date() # 日志记录时间 + ip = Keyword() # 访问IP地址 + geoip = Object(GeoIp, required=False) # 地理位置信息(嵌套) + useragent = Object(UserAgent, required=False) # 用户代理信息(嵌套) class Index: - name = 'performance' + #ymq:定义索引配置 + name = 'performance' # 索引名称 settings = { - "number_of_shards": 1, - "number_of_replicas": 0 + "number_of_shards": 1, # 分片数量 + "number_of_replicas": 0 # 副本数量 } class Meta: - doc_type = 'ElapsedTime' + doc_type = 'ElapsedTime' # 文档类型(Elasticsearch 7.x后逐渐废弃) class ElaspedTimeDocumentManager: + #ymq:性能耗时文档的管理类,用于索引的创建、删除和数据插入 @staticmethod def build_index(): + #ymq:创建索引(如果不存在) from elasticsearch import Elasticsearch client = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts']) - res = client.indices.exists(index="performance") + res = client.indices.exists(index="performance") # 检查索引是否存在 if not res: - ElapsedTimeDocument.init() + ElapsedTimeDocument.init() # 初始化索引 @staticmethod def delete_index(): + #ymq:删除performance索引 from elasticsearch import Elasticsearch es = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts']) - es.indices.delete(index='performance', ignore=[400, 404]) + es.indices.delete(index='performance', ignore=[400, 404]) # 忽略不存在的情况 @staticmethod def create(url, time_taken, log_datetime, useragent, ip): - ElaspedTimeDocumentManager.build_index() + #ymq:创建一条性能耗时记录 + ElaspedTimeDocumentManager.build_index() # 确保索引存在 + + #ymq:构建用户代理信息对象 ua = UserAgent() ua.browser = UserAgentBrowser() ua.browser.Family = useragent.browser.family @@ -116,98 +140,112 @@ class ElaspedTimeDocumentManager: ua.string = useragent.ua_string ua.is_bot = useragent.is_bot + #ymq:创建文档实例,使用时间戳作为唯一ID doc = ElapsedTimeDocument( meta={ 'id': int( round( time.time() * - 1000)) + 1000)) # 毫秒级时间戳作为ID }, url=url, time_taken=time_taken, log_datetime=log_datetime, useragent=ua, ip=ip) + #ymq:保存文档时应用geoip管道解析IP地址 doc.save(pipeline="geoip") class ArticleDocument(Document): + #ymq:定义文章信息的Elasticsearch文档(用于搜索) + #ymq:body和title使用IK分词器(max_word分词更细,smart更简洁) body = Text(analyzer='ik_max_word', search_analyzer='ik_smart') title = Text(analyzer='ik_max_word', search_analyzer='ik_smart') + #ymq:嵌套作者信息 author = Object(properties={ 'nickname': Text(analyzer='ik_max_word', search_analyzer='ik_smart'), 'id': Integer() }) + #ymq:嵌套分类信息 category = Object(properties={ 'name': Text(analyzer='ik_max_word', search_analyzer='ik_smart'), 'id': Integer() }) + #ymq:嵌套标签信息(数组) tags = Object(properties={ 'name': Text(analyzer='ik_max_word', search_analyzer='ik_smart'), 'id': Integer() }) - pub_time = Date() - status = Text() - comment_status = Text() - type = Text() - views = Integer() - article_order = Integer() + pub_time = Date() # 发布时间 + status = Text() # 状态(发布/草稿) + comment_status = Text() # 评论状态(开启/关闭) + type = Text() # 类型(文章/页面) + views = Integer() # 浏览量 + article_order = Integer() # 排序序号 class Index: - name = 'blog' + name = 'blog' # 索引名称 settings = { "number_of_shards": 1, "number_of_replicas": 0 } class Meta: - doc_type = 'Article' + doc_type = 'Article' # 文档类型 class ArticleDocumentManager(): + #ymq:文章文档的管理类,用于索引操作和数据同步 def __init__(self): + #ymq:初始化时创建索引 self.create_index() def create_index(self): + #ymq:初始化文章索引 ArticleDocument.init() def delete_index(self): + #ymq:删除blog索引 from elasticsearch import Elasticsearch es = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts']) es.indices.delete(index='blog', ignore=[400, 404]) def convert_to_doc(self, articles): + #ymq:将Django模型对象转换为Elasticsearch文档对象 return [ ArticleDocument( - meta={ - 'id': article.id}, + meta={'id': article.id}, # 使用文章ID作为文档ID body=article.body, title=article.title, author={ 'nickname': article.author.username, - 'id': article.author.id}, + 'id': article.author.id + }, category={ 'name': article.category.name, - 'id': article.category.id}, - tags=[ - { - 'name': t.name, - 'id': t.id} for t in article.tags.all()], + 'id': article.category.id + }, + tags=[{'name': t.name, 'id': t.id} for t in article.tags.all()], # 转换多对多标签 pub_time=article.pub_time, status=article.status, comment_status=article.comment_status, type=article.type, views=article.views, - article_order=article.article_order) for article in articles] + article_order=article.article_order + ) for article in articles + ] def rebuild(self, articles=None): + #ymq:重建索引(默认同步所有文章,可指定文章列表) ArticleDocument.init() - articles = articles if articles else Article.objects.all() - docs = self.convert_to_doc(articles) + articles = articles if articles else Article.objects.all() # 获取文章数据 + docs = self.convert_to_doc(articles) # 转换为文档对象 for doc in docs: - doc.save() + doc.save() # 保存到Elasticsearch def update_docs(self, docs): + #ymq:批量更新文档 for doc in docs: - doc.save() + doc.save() \ No newline at end of file diff --git a/src/django-master/blog/forms.py b/src/django-master/blog/forms.py index 715be76..e39870e 100644 --- a/src/django-master/blog/forms.py +++ b/src/django-master/blog/forms.py @@ -1,19 +1,32 @@ import logging +#ymq:导入logging模块,用于记录搜索相关日志 from django import forms +#ymq:导入Django的forms模块,用于创建自定义表单 from haystack.forms import SearchForm +#ymq:导入Haystack的SearchForm基类,扩展实现博客搜索表单 logger = logging.getLogger(__name__) +#ymq:创建当前模块的日志记录器实例 class BlogSearchForm(SearchForm): + #ymq:定义博客搜索表单类,继承自Haystack的SearchForm querydata = forms.CharField(required=True) + #ymq:定义搜索关键词字段,required=True表示该字段为必填项 def search(self): + #ymq:重写父类的search方法,自定义搜索逻辑 datas = super(BlogSearchForm, self).search() + #ymq:调用父类search方法,获取基础搜索结果 + if not self.is_valid(): + #ymq:如果表单数据验证不通过,返回无结果响应 return self.no_query_found() if self.cleaned_data['querydata']: + #ymq:如果存在合法的搜索关键词,记录关键词日志 logger.info(self.cleaned_data['querydata']) + return datas + #ymq:返回最终的搜索结果集 \ No newline at end of file diff --git a/src/django-master/blog/management/commands/build_index.py b/src/django-master/blog/management/commands/build_index.py index 3c4acd7..69a4490 100644 --- a/src/django-master/blog/management/commands/build_index.py +++ b/src/django-master/blog/management/commands/build_index.py @@ -1,18 +1,31 @@ from django.core.management.base import BaseCommand +#ymq:导入Django的BaseCommand类,用于创建自定义管理命令 from blog.documents import ElapsedTimeDocument, ArticleDocumentManager, ElaspedTimeDocumentManager, \ ELASTICSEARCH_ENABLED +#ymq:从blog.documents导入Elasticsearch相关的文档类和管理器,以及启用状态常量 # TODO 参数化 class Command(BaseCommand): + #ymq:定义自定义管理命令类,继承自BaseCommand help = 'build search index' + #ymq:定义命令的帮助信息,使用python manage.py help build_index时显示 def handle(self, *args, **options): + #ymq:命令的核心处理方法,执行实际的索引构建逻辑 if ELASTICSEARCH_ENABLED: + #ymq:仅当Elasticsearch启用时执行以下操作 ElaspedTimeDocumentManager.build_index() + #ymq:调用性能耗时文档管理器构建索引(若不存在) + manager = ElapsedTimeDocument() manager.init() + #ymq:初始化ElapsedTimeDocument对应的索引结构 + manager = ArticleDocumentManager() manager.delete_index() + #ymq:删除已存在的文章索引(重建前清理) + manager.rebuild() + #ymq:重建文章索引,将数据库中的文章数据同步到Elasticsearch \ No newline at end of file diff --git a/src/django-master/blog/management/commands/build_search_words.py b/src/django-master/blog/management/commands/build_search_words.py index cfe7e0d..35d0c6e 100644 --- a/src/django-master/blog/management/commands/build_search_words.py +++ b/src/django-master/blog/management/commands/build_search_words.py @@ -1,13 +1,20 @@ from django.core.management.base import BaseCommand +#ymq:导入Django的BaseCommand类,用于创建自定义管理命令 from blog.models import Tag, Category +#ymq:从blog应用导入Tag(标签)和Category(分类)模型 # TODO 参数化 class Command(BaseCommand): + #ymq:定义自定义管理命令类,继承自BaseCommand help = 'build search words' + #ymq:命令的帮助信息,说明该命令用于生成搜索词 def handle(self, *args, **options): + #ymq:命令的核心处理方法,执行生成搜索词的逻辑 + # 从标签和分类中提取名称,使用set去重 datas = set([t.name for t in Tag.objects.all()] + [t.name for t in Category.objects.all()]) - print('\n'.join(datas)) + # 按行打印所有去重后的名称(作为搜索词) + print('\n'.join(datas)) \ No newline at end of file diff --git a/src/django-master/blog/management/commands/clear_cache.py b/src/django-master/blog/management/commands/clear_cache.py index 0d66172..6366680 100644 --- a/src/django-master/blog/management/commands/clear_cache.py +++ b/src/django-master/blog/management/commands/clear_cache.py @@ -1,11 +1,17 @@ from django.core.management.base import BaseCommand +#ymq:导入Django的BaseCommand类,用于创建自定义管理命令 from djangoblog.utils import cache +#ymq:从项目工具模块导入缓存工具 class Command(BaseCommand): + #ymq:定义清除缓存的自定义命令类,继承自BaseCommand help = 'clear the whole cache' + #ymq:命令的帮助信息,说明该命令用于清除所有缓存 def handle(self, *args, **options): - cache.clear() + #ymq:命令的核心处理方法,执行清除缓存操作 + cache.clear() # 调用缓存工具的clear方法,清除所有缓存数据 self.stdout.write(self.style.SUCCESS('Cleared cache\n')) + #ymq:向标准输出写入成功信息,使用Django的SUCCESS样式(通常为绿色) \ No newline at end of file diff --git a/src/django-master/blog/management/commands/create_testdata.py b/src/django-master/blog/management/commands/create_testdata.py index 675d2ba..a3dcce8 100644 --- a/src/django-master/blog/management/commands/create_testdata.py +++ b/src/django-master/blog/management/commands/create_testdata.py @@ -1,40 +1,62 @@ from django.contrib.auth import get_user_model +#ymq:导入获取用户模型的函数,便于灵活引用用户模型 from django.contrib.auth.hashers import make_password +#ymq:导入密码加密函数,用于安全存储密码 from django.core.management.base import BaseCommand +#ymq:导入Django的BaseCommand类,用于创建自定义管理命令 from blog.models import Article, Tag, Category +#ymq:从blog应用导入文章、标签、分类模型 class Command(BaseCommand): + #ymq:定义创建测试数据的自定义命令类,继承自BaseCommand help = 'create test datas' + #ymq:命令的帮助信息,说明该命令用于创建测试数据 def handle(self, *args, **options): + #ymq:命令的核心处理方法,执行创建测试数据的逻辑 + # 创建或获取测试用户(邮箱、用户名、密码加密存储) user = get_user_model().objects.get_or_create( email='test@test.com', username='测试用户', password=make_password('test!q@w#eTYU'))[0] + # 创建或获取父分类 pcategory = Category.objects.get_or_create( name='我是父类目', parent_category=None)[0] + # 创建或获取子分类(关联父分类) category = Category.objects.get_or_create( name='子类目', parent_category=pcategory)[0] - category.save() + category.save() # 保存子分类 + + # 创建基础标签 basetag = Tag() basetag.name = "标签" basetag.save() + + # 批量创建20篇测试文章 for i in range(1, 20): + # 创建或获取文章(关联分类、作者) article = Article.objects.get_or_create( category=category, - title='nice title ' + str(i), - body='nice content ' + str(i), + title='nice title ' + str(i), # 文章标题带序号 + body='nice content ' + str(i), # 文章内容带序号 author=user)[0] + + # 创建带序号的标签 tag = Tag() tag.name = "标签" + str(i) tag.save() + + # 给文章添加标签(包含基础标签和序号标签) article.tags.add(tag) article.tags.add(basetag) - article.save() + article.save() # 保存文章 + # 清除缓存,确保测试数据立即生效 from djangoblog.utils import cache cache.clear() - self.stdout.write(self.style.SUCCESS('created test datas \n')) + + # 输出成功信息 + self.stdout.write(self.style.SUCCESS('created test datas \n')) \ No newline at end of file diff --git a/src/django-master/blog/management/commands/ping_baidu.py b/src/django-master/blog/management/commands/ping_baidu.py index 2c7fbdd..092ed48 100644 --- a/src/django-master/blog/management/commands/ping_baidu.py +++ b/src/django-master/blog/management/commands/ping_baidu.py @@ -1,16 +1,24 @@ from django.core.management.base import BaseCommand +#ymq:导入Django的BaseCommand类,用于创建自定义管理命令 from djangoblog.spider_notify import SpiderNotify +#ymq:导入蜘蛛通知工具类,用于向搜索引擎提交URL from djangoblog.utils import get_current_site +#ymq:导入获取当前站点信息的工具函数 from blog.models import Article, Tag, Category +#ymq:从blog应用导入文章、标签、分类模型 site = get_current_site().domain +#ymq:获取当前站点的域名,用于构建完整URL class Command(BaseCommand): + #ymq:定义百度URL提交命令类,继承自BaseCommand help = 'notify baidu url' + #ymq:命令的帮助信息,说明该命令用于向百度提交URL def add_arguments(self, parser): + #ymq:定义命令参数,指定提交的数据类型 parser.add_argument( 'data_type', type=str, @@ -20,31 +28,46 @@ class Command(BaseCommand): 'tag', 'category'], help='article : all article,tag : all tag,category: all category,all: All of these') + #ymq:参数说明:article-所有文章,tag-所有标签,category-所有分类,all-全部 def get_full_url(self, path): + #ymq:构建包含域名的完整URL url = "https://{site}{path}".format(site=site, path=path) return url def handle(self, *args, **options): - type = options['data_type'] - self.stdout.write('start get %s' % type) + #ymq:命令核心处理方法,执行URL收集和提交 + type = options['data_type'] # 获取用户指定的数据类型 + self.stdout.write('start get %s' % type) # 输出开始收集信息的提示 - urls = [] + urls = [] # 存储待提交的URL列表 + + # 根据数据类型收集对应的URL if type == 'article' or type == 'all': + # 收集已发布文章的URL for article in Article.objects.filter(status='p'): urls.append(article.get_full_url()) + if type == 'tag' or type == 'all': + # 收集所有标签页的URL for tag in Tag.objects.all(): url = tag.get_absolute_url() urls.append(self.get_full_url(url)) + if type == 'category' or type == 'all': + # 收集所有分类页的URL for category in Category.objects.all(): url = category.get_absolute_url() urls.append(self.get_full_url(url)) + # 输出待提交的URL数量 self.stdout.write( self.style.SUCCESS( 'start notify %d urls' % len(urls))) + + # 调用工具类向百度提交URL SpiderNotify.baidu_notify(urls) - self.stdout.write(self.style.SUCCESS('finish notify')) + + # 输出提交完成的提示 + self.stdout.write(self.style.SUCCESS('finish notify')) \ No newline at end of file diff --git a/src/django-master/blog/management/commands/sync_user_avatar.py b/src/django-master/blog/management/commands/sync_user_avatar.py index d0f4612..f51a404 100644 --- a/src/django-master/blog/management/commands/sync_user_avatar.py +++ b/src/django-master/blog/management/commands/sync_user_avatar.py @@ -1,47 +1,70 @@ import requests +#ymq:导入requests库,用于发送HTTP请求测试图片URL有效性 from django.core.management.base import BaseCommand +#ymq:导入Django的BaseCommand类,用于创建自定义管理命令 from django.templatetags.static import static +#ymq:导入static标签,用于获取静态文件URL from djangoblog.utils import save_user_avatar +#ymq:导入保存用户头像的工具函数 from oauth.models import OAuthUser +#ymq:从oauth应用导入OAuthUser模型,存储第三方用户信息 from oauth.oauthmanager import get_manager_by_type +#ymq:导入获取对应第三方登录管理器的函数 class Command(BaseCommand): + #ymq:定义同步用户头像的自定义命令类,继承自BaseCommand help = 'sync user avatar' + #ymq:命令的帮助信息,说明该命令用于同步用户头像 def test_picture(self, url): + #ymq:测试图片URL是否有效(状态码200) try: if requests.get(url, timeout=2).status_code == 200: - return True + return True # URL有效返回True except: - pass + pass # 异常或状态码非200返回None def handle(self, *args, **options): - static_url = static("../") - users = OAuthUser.objects.all() - self.stdout.write(f'开始同步{len(users)}个用户头像') + #ymq:命令核心处理方法,执行用户头像同步逻辑 + static_url = static("../") # 获取静态文件基础URL + users = OAuthUser.objects.all() # 获取所有第三方用户 + self.stdout.write(f'开始同步{len(users)}个用户头像') # 输出待同步用户数量 + for u in users: - self.stdout.write(f'开始同步:{u.nickname}') - url = u.picture + #ymq:遍历每个用户进行头像同步 + self.stdout.write(f'开始同步:{u.nickname}') # 输出当前同步的用户名 + url = u.picture # 获取用户当前头像URL + if url: + # 处理已有头像URL的情况 if url.startswith(static_url): + # 头像URL是本地静态文件 if self.test_picture(url): + # 图片有效,跳过同步 continue else: + # 图片无效,重新获取 if u.metadata: + # 有元数据,通过第三方管理器获取头像 manage = get_manager_by_type(u.type) url = manage.get_picture(u.metadata) - url = save_user_avatar(url) + url = save_user_avatar(url) # 保存头像并获取本地URL else: + # 无元数据,使用默认头像 url = static('blog/img/avatar.png') else: + # 头像URL是外部链接,保存到本地 url = save_user_avatar(url) else: + # 无头像URL,使用默认头像 url = static('blog/img/avatar.png') + if url: - self.stdout.write( - f'结束同步:{u.nickname}.url:{url}') + # 保存更新后的头像URL + self.stdout.write(f'结束同步:{u.nickname}.url:{url}') u.picture = url u.save() - self.stdout.write('结束同步') + + self.stdout.write('结束同步') # 输出同步完成提示 \ No newline at end of file diff --git a/src/django-master/blog/middleware.py b/src/django-master/blog/middleware.py index 94dd70c..2c2bf83 100644 --- a/src/django-master/blog/middleware.py +++ b/src/django-master/blog/middleware.py @@ -1,42 +1,62 @@ import logging import time +#ymq:导入logging用于日志记录,time用于计算页面加载时间 from ipware import get_client_ip +#ymq:导入get_client_ip工具,用于获取客户端IP地址 from user_agents import parse +#ymq:导入parse函数,用于解析用户代理字符串 from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager +#ymq:从博客文档模块导入Elasticsearch启用状态和性能日志管理器 logger = logging.getLogger(__name__) +#ymq:创建当前模块的日志记录器实例 class OnlineMiddleware(object): + #ymq:定义在线中间件类,用于记录页面加载性能和访问信息 def __init__(self, get_response=None): + #ymq:初始化中间件,接收Django的响应处理器 self.get_response = get_response super().__init__() def __call__(self, request): + #ymq:中间件核心方法,处理请求并返回响应 ''' page render time ''' - start_time = time.time() - response = self.get_response(request) - http_user_agent = request.META.get('HTTP_USER_AGENT', '') - ip, _ = get_client_ip(request) - user_agent = parse(http_user_agent) + #ymq:记录页面渲染时间的逻辑 + start_time = time.time() # 记录请求处理开始时间 + response = self.get_response(request) # 调用后续中间件或视图处理请求 + + #ymq:获取用户代理和IP地址 + http_user_agent = request.META.get('HTTP_USER_AGENT', '') # 获取用户代理字符串 + ip, _ = get_client_ip(request) # 获取客户端IP地址 + user_agent = parse(http_user_agent) # 解析用户代理信息(浏览器、设备等) + + #ymq:非流式响应才处理(流式响应无法修改内容) if not response.streaming: try: - cast_time = time.time() - start_time + cast_time = time.time() - start_time # 计算页面加载耗时(秒) + + #ymq:如果启用了Elasticsearch,记录性能数据 if ELASTICSEARCH_ENABLED: - time_taken = round((cast_time) * 1000, 2) - url = request.path + time_taken = round((cast_time) * 1000, 2) #ymq: 转换为毫秒并保留两位小数 + url = request.path # 获取请求的URL路径 from django.utils import timezone + #ymq:调用管理器创建性能日志记录 ElaspedTimeDocumentManager.create( url=url, time_taken=time_taken, - log_datetime=timezone.now(), - useragent=user_agent, - ip=ip) + log_datetime=timezone.now(), #ymq: 记录当前时间 + useragent=user_agent, #ymq: 已解析的用户代理信息 + ip=ip) #ymq: 客户端IP + + #ymq:替换响应内容中的标记为实际加载时间(保留前5位字符) response.content = response.content.replace( b'', str.encode(str(cast_time)[:5])) + except Exception as e: + #ymq:捕获并记录处理过程中的异常 logger.error("Error OnlineMiddleware: %s" % e) - return response + return response #ymq: 返回处理后的响应 \ No newline at end of file diff --git a/src/django-master/blog/migrations/0001_initial.py b/src/django-master/blog/migrations/0001_initial.py index 3d391b6..a63b9e7 100644 --- a/src/django-master/blog/migrations/0001_initial.py +++ b/src/django-master/blog/migrations/0001_initial.py @@ -1,25 +1,34 @@ # Generated by Django 4.1.7 on 2023-03-02 07:14 +#ymq:该迁移文件由Django 4.1.7自动生成,生成时间为2023-03-02 07:14 from django.conf import settings from django.db import migrations, models import django.db.models.deletion import django.utils.timezone import mdeditor.fields +#ymq:导入Django迁移相关模块、时间工具和markdown编辑器字段 class Migration(migrations.Migration): + #ymq:定义迁移类,继承自migrations.Migration initial = True + #ymq:标记为初始迁移(第一次创建模型时生成) dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), + #ymq:依赖于用户模型,确保用户表先创建 ] operations = [ + #ymq:定义数据库操作列表,按顺序执行创建模型的操作 + migrations.CreateModel( + #ymq:创建BlogSettings模型(网站配置) name='BlogSettings', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + #ymq:自增主键字段 ('sitename', models.CharField(default='', max_length=200, verbose_name='网站名称')), ('site_description', models.TextField(default='', max_length=1000, verbose_name='网站描述')), ('site_seo_description', models.TextField(default='', max_length=1000, verbose_name='网站SEO描述')), @@ -35,13 +44,17 @@ class Migration(migrations.Migration): ('analyticscode', models.TextField(default='', max_length=1000, verbose_name='网站统计代码')), ('show_gongan_code', models.BooleanField(default=False, verbose_name='是否显示公安备案号')), ('gongan_beiancode', models.TextField(blank=True, default='', max_length=2000, null=True, verbose_name='公安备案号')), + #ymq:以上为网站配置的各个字段,包含网站基本信息、显示设置、备案信息等 ], options={ 'verbose_name': '网站配置', 'verbose_name_plural': '网站配置', + #ymq:模型的显示名称 }, ), + migrations.CreateModel( + #ymq:创建Links模型(友情链接) name='Links', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), @@ -52,14 +65,18 @@ class Migration(migrations.Migration): ('show_type', models.CharField(choices=[('i', '首页'), ('l', '列表页'), ('p', '文章页面'), ('a', '全站'), ('s', '友情链接页面')], default='i', max_length=1, verbose_name='显示类型')), ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')), ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')), + #ymq:友情链接字段,包含名称、URL、排序、显示位置等 ], options={ 'verbose_name': '友情链接', 'verbose_name_plural': '友情链接', 'ordering': ['sequence'], + #ymq:按排序号升序排列 }, ), + migrations.CreateModel( + #ymq:创建SideBar模型(侧边栏) name='SideBar', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), @@ -69,14 +86,18 @@ class Migration(migrations.Migration): ('is_enable', models.BooleanField(default=True, verbose_name='是否启用')), ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')), ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')), + #ymq:侧边栏字段,包含标题、内容、排序等 ], options={ 'verbose_name': '侧边栏', 'verbose_name_plural': '侧边栏', 'ordering': ['sequence'], + #ymq:按排序号升序排列 }, ), + migrations.CreateModel( + #ymq:创建Tag模型(标签) name='Tag', fields=[ ('id', models.AutoField(primary_key=True, serialize=False)), @@ -84,14 +105,18 @@ class Migration(migrations.Migration): ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')), ('name', models.CharField(max_length=30, unique=True, verbose_name='标签名')), ('slug', models.SlugField(blank=True, default='no-slug', max_length=60)), + #ymq:标签字段,包含名称、URL友好标识(slug)等 ], options={ 'verbose_name': '标签', 'verbose_name_plural': '标签', 'ordering': ['name'], + #ymq:按标签名升序排列 }, ), + migrations.CreateModel( + #ymq:创建Category模型(分类) name='Category', fields=[ ('id', models.AutoField(primary_key=True, serialize=False)), @@ -101,14 +126,18 @@ class Migration(migrations.Migration): ('slug', models.SlugField(blank=True, default='no-slug', max_length=60)), ('index', models.IntegerField(default=0, verbose_name='权重排序-越大越靠前')), ('parent_category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='父级分类')), + #ymq:分类字段,支持多级分类(自关联外键)、权重排序等 ], options={ 'verbose_name': '分类', 'verbose_name_plural': '分类', 'ordering': ['-index'], + #ymq:按权重降序排列(权重越大越靠前) }, ), + migrations.CreateModel( + #ymq:创建Article模型(文章) name='Article', fields=[ ('id', models.AutoField(primary_key=True, serialize=False)), @@ -116,6 +145,7 @@ class Migration(migrations.Migration): ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')), ('title', models.CharField(max_length=200, unique=True, verbose_name='标题')), ('body', mdeditor.fields.MDTextField(verbose_name='正文')), + #ymq:使用markdown编辑器字段存储文章正文 ('pub_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='发布时间')), ('status', models.CharField(choices=[('d', '草稿'), ('p', '发表')], default='p', max_length=1, verbose_name='文章状态')), ('comment_status', models.CharField(choices=[('o', '打开'), ('c', '关闭')], default='o', max_length=1, verbose_name='评论状态')), @@ -124,14 +154,19 @@ class Migration(migrations.Migration): ('article_order', models.IntegerField(default=0, verbose_name='排序,数字越大越靠前')), ('show_toc', models.BooleanField(default=False, verbose_name='是否显示toc目录')), ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='作者')), + #ymq:关联用户模型(外键),级联删除 ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='分类')), + #ymq:关联分类模型(外键),级联删除 ('tags', models.ManyToManyField(blank=True, to='blog.tag', verbose_name='标签集合')), + #ymq:多对多关联标签模型 ], options={ 'verbose_name': '文章', 'verbose_name_plural': '文章', 'ordering': ['-article_order', '-pub_time'], + #ymq:先按排序号降序,再按发布时间降序 'get_latest_by': 'id', + #ymq:按id获取最新记录 }, ), - ] + ] \ No newline at end of file diff --git a/src/django-master/blog/migrations/0002_blogsettings_global_footer_and_more.py b/src/django-master/blog/migrations/0002_blogsettings_global_footer_and_more.py index adbaa36..1304b8a 100644 --- a/src/django-master/blog/migrations/0002_blogsettings_global_footer_and_more.py +++ b/src/django-master/blog/migrations/0002_blogsettings_global_footer_and_more.py @@ -1,23 +1,34 @@ # Generated by Django 4.1.7 on 2023-03-29 06:08 +#ymq:该迁移文件由Django 4.1.7自动生成,生成时间为2023-03-29 06:08 from django.db import migrations, models +#ymq:导入Django迁移相关模块 class Migration(migrations.Migration): + #ymq:定义迁移类,继承自migrations.Migration dependencies = [ ('blog', '0001_initial'), + #ymq:依赖于blog应用的0001_initial迁移文件,确保先执行初始迁移 ] operations = [ + #ymq:定义数据库操作列表,添加新字段 + migrations.AddField( + #ymq:向BlogSettings模型添加global_footer字段 model_name='blogsettings', name='global_footer', field=models.TextField(blank=True, default='', null=True, verbose_name='公共尾部'), + #ymq:字段类型为文本字段,允许为空,默认值为空字符串,verbose_name为"公共尾部" ), + migrations.AddField( + #ymq:向BlogSettings模型添加global_header字段 model_name='blogsettings', name='global_header', field=models.TextField(blank=True, default='', null=True, verbose_name='公共头部'), + #ymq:字段类型为文本字段,允许为空,默认值为空字符串,verbose_name为"公共头部" ), - ] + ] \ No newline at end of file diff --git a/src/django-master/blog/migrations/0003_blogsettings_comment_need_review.py b/src/django-master/blog/migrations/0003_blogsettings_comment_need_review.py index e9f5502..908f852 100644 --- a/src/django-master/blog/migrations/0003_blogsettings_comment_need_review.py +++ b/src/django-master/blog/migrations/0003_blogsettings_comment_need_review.py @@ -1,17 +1,25 @@ # Generated by Django 4.2.1 on 2023-05-09 07:45 +#ymq:该迁移文件由Django 4.2.1自动生成,生成时间为2023-05-09 07:45 from django.db import migrations, models - +#ymq:导入Django迁移相关模块 class Migration(migrations.Migration): + #ymq:定义迁移类,继承自migrations.Migration + dependencies = [ ('blog', '0002_blogsettings_global_footer_and_more'), + #ymq:依赖于blog应用的0002号迁移文件,确保先执行该迁移 ] operations = [ + #ymq:定义数据库操作,此处为添加字段 + migrations.AddField( - model_name='blogsettings', - name='comment_need_review', + #ymq:向BlogSettings模型添加comment_need_review字段 + model_name='blogsettings', # 目标模型名称 + name='comment_need_review', # 新字段名称 field=models.BooleanField(default=False, verbose_name='评论是否需要审核'), + #ymq:字段类型为布尔值,默认值为False(不需要审核),后台显示名称为"评论是否需要审核" ), - ] + ] \ No newline at end of file diff --git a/src/django-master/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py b/src/django-master/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py index ceb1398..f6465d8 100644 --- a/src/django-master/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py +++ b/src/django-master/blog/migrations/0004_rename_analyticscode_blogsettings_analytics_code_and_more.py @@ -1,27 +1,39 @@ # Generated by Django 4.2.1 on 2023-05-09 07:51 +#ymq:该迁移文件由Django 4.2.1自动生成,生成时间为2023-05-09 07:51 from django.db import migrations +#ymq:导入Django迁移相关模块 class Migration(migrations.Migration): + #ymq:定义迁移类,继承自migrations.Migration + dependencies = [ ('blog', '0003_blogsettings_comment_need_review'), + #ymq:依赖于blog应用的0003号迁移文件,确保先执行该迁移 ] operations = [ + #ymq:定义数据库操作列表,主要是重命名字段 + migrations.RenameField( - model_name='blogsettings', - old_name='analyticscode', - new_name='analytics_code', + #ymq:重命名BlogSettings模型的analyticscode字段 + model_name='blogsettings', # 目标模型名称 + old_name='analyticscode', # 旧字段名 + new_name='analytics_code', # 新字段名(改为下划线命名规范) ), + migrations.RenameField( + #ymq:重命名BlogSettings模型的beiancode字段 model_name='blogsettings', old_name='beiancode', - new_name='beian_code', + new_name='beian_code', # 改为下划线命名规范 ), + migrations.RenameField( + #ymq:重命名BlogSettings模型的sitename字段 model_name='blogsettings', old_name='sitename', - new_name='site_name', + new_name='site_name', # 改为下划线命名规范 ), - ] + ] \ No newline at end of file diff --git a/src/django-master/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py b/src/django-master/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py index d08e853..d06b10a 100644 --- a/src/django-master/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py +++ b/src/django-master/blog/migrations/0005_alter_article_options_alter_category_options_and_more.py @@ -1,20 +1,27 @@ # Generated by Django 4.2.5 on 2023-09-06 13:13 +#ymq:该迁移文件由Django 4.2.5自动生成,生成时间为2023-09-06 13:13 from django.conf import settings from django.db import migrations, models import django.db.models.deletion import django.utils.timezone import mdeditor.fields +#ymq:导入Django迁移相关模块、时间工具和markdown编辑器字段 class Migration(migrations.Migration): + #ymq:定义迁移类,继承自migrations.Migration dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('blog', '0004_rename_analyticscode_blogsettings_analytics_code_and_more'), + #ymq:依赖于用户模型和blog应用的0004号迁移文件 ] operations = [ + #ymq:定义数据库操作列表,包含模型选项修改、字段删除、添加和修改 + + # 修改模型的元数据选项(主要是verbose_name的国际化调整) migrations.AlterModelOptions( name='article', options={'get_latest_by': 'id', 'ordering': ['-article_order', '-pub_time'], 'verbose_name': 'article', 'verbose_name_plural': 'article'}, @@ -35,6 +42,8 @@ class Migration(migrations.Migration): name='tag', options={'ordering': ['name'], 'verbose_name': 'tag', 'verbose_name_plural': 'tag'}, ), + + # 删除旧的时间字段(命名方式调整) migrations.RemoveField( model_name='article', name='created_time', @@ -67,6 +76,8 @@ class Migration(migrations.Migration): model_name='tag', name='last_mod_time', ), + + # 添加新的时间字段(统一命名为creation_time和last_modify_time) migrations.AddField( model_name='article', name='creation_time', @@ -107,6 +118,8 @@ class Migration(migrations.Migration): name='last_modify_time', field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'), ), + + # 修改Article模型的字段属性(主要是verbose_name国际化) migrations.AlterField( model_name='article', name='article_order', @@ -167,6 +180,8 @@ class Migration(migrations.Migration): name='views', field=models.PositiveIntegerField(default=0, verbose_name='views'), ), + + # 修改BlogSettings模型的字段属性(verbose_name国际化) migrations.AlterField( model_name='blogsettings', name='article_comment_count', @@ -222,6 +237,8 @@ class Migration(migrations.Migration): name='site_seo_description', field=models.TextField(default='', max_length=1000, verbose_name='site seo description'), ), + + # 修改Category模型的字段属性 migrations.AlterField( model_name='category', name='index', @@ -237,6 +254,8 @@ class Migration(migrations.Migration): name='parent_category', field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='parent category'), ), + + # 修改Links模型的字段属性 migrations.AlterField( model_name='links', name='is_enable', @@ -267,6 +286,8 @@ class Migration(migrations.Migration): name='show_type', field=models.CharField(choices=[('i', 'index'), ('l', 'list'), ('p', 'post'), ('a', 'all'), ('s', 'slide')], default='i', max_length=1, verbose_name='show type'), ), + + # 修改SideBar模型的字段属性 migrations.AlterField( model_name='sidebar', name='content', @@ -292,9 +313,11 @@ class Migration(migrations.Migration): name='sequence', field=models.IntegerField(unique=True, verbose_name='order'), ), + + # 修改Tag模型的字段属性 migrations.AlterField( model_name='tag', name='name', field=models.CharField(max_length=30, unique=True, verbose_name='tag name'), ), - ] + ] \ No newline at end of file diff --git a/src/django-master/blog/migrations/0006_alter_blogsettings_options.py b/src/django-master/blog/migrations/0006_alter_blogsettings_options.py index e36feb4..207d123 100644 --- a/src/django-master/blog/migrations/0006_alter_blogsettings_options.py +++ b/src/django-master/blog/migrations/0006_alter_blogsettings_options.py @@ -1,17 +1,23 @@ # Generated by Django 4.2.7 on 2024-01-26 02:41 +#ymq:该迁移文件由Django 4.2.7自动生成,生成时间为2024年1月26日02:41 from django.db import migrations +#ymq:导入Django迁移相关模块 class Migration(migrations.Migration): + #ymq:定义迁移类,继承自migrations.Migration dependencies = [ ('blog', '0005_alter_article_options_alter_category_options_and_more'), + #ymq:依赖于blog应用的0005号迁移文件,确保先执行该迁移 ] operations = [ + #ymq:定义数据库操作,此处为修改模型选项 migrations.AlterModelOptions( name='blogsettings', + #ymq:修改BlogSettings模型的显示名称,改为英文"Website configuration" options={'verbose_name': 'Website configuration', 'verbose_name_plural': 'Website configuration'}, ), - ] + ] \ No newline at end of file diff --git a/src/django-master/blog/models.py b/src/django-master/blog/models.py index 083788b..d92d098 100644 --- a/src/django-master/blog/models.py +++ b/src/django-master/blog/models.py @@ -1,6 +1,7 @@ import logging import re from abc import abstractmethod +#ymq:导入logging用于日志记录,re用于正则表达式操作,abstractmethod用于定义抽象方法 from django.conf import settings from django.core.exceptions import ValidationError @@ -8,36 +9,43 @@ from django.db import models from django.urls import reverse from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ -from mdeditor.fields import MDTextField -from uuslug import slugify +from mdeditor.fields import MDTextField # 导入markdown编辑器字段 +from uuslug import slugify # 导入slug生成工具 -from djangoblog.utils import cache_decorator, cache -from djangoblog.utils import get_current_site +from djangoblog.utils import cache_decorator, cache # 导入缓存相关工具 +from djangoblog.utils import get_current_site # 导入获取当前站点信息的工具 -logger = logging.getLogger(__name__) +logger = logging.getLogger(__name__) # 创建当前模块的日志记录器 class LinkShowType(models.TextChoices): - I = ('i', _('index')) - L = ('l', _('list')) - P = ('p', _('post')) - A = ('a', _('all')) - S = ('s', _('slide')) + #ymq:定义链接展示位置的枚举类 + I = ('i', _('index')) # 首页展示 + L = ('l', _('list')) # 列表页展示 + P = ('p', _('post')) # 文章页展示 + A = ('a', _('all')) # 所有页面展示 + S = ('s', _('slide')) # 幻灯片展示 class BaseModel(models.Model): - id = models.AutoField(primary_key=True) - creation_time = models.DateTimeField(_('creation time'), default=now) - last_modify_time = models.DateTimeField(_('modify time'), default=now) + #ymq:定义模型基类,封装公共字段和方法(抽象类) + id = models.AutoField(primary_key=True) # 自增主键 + creation_time = models.DateTimeField(_('creation time'), default=now) # 创建时间 + last_modify_time = models.DateTimeField(_('modify time'), default=now) # 最后修改时间 def save(self, *args, **kwargs): + #ymq:重写保存方法,处理slug生成和特殊更新逻辑 + # 判断是否是更新文章浏览量的操作 is_update_views = isinstance( self, Article) and 'update_fields' in kwargs and kwargs['update_fields'] == ['views'] if is_update_views: + # 单独处理浏览量更新,提高性能 Article.objects.filter(pk=self.pk).update(views=self.views) else: + # 自动生成slug(用于URL友好化) if 'slug' in self.__dict__: + # 根据title或name字段生成slug slug = getattr( self, 'title') if 'title' in self.__dict__ else getattr( self, 'name') @@ -45,79 +53,88 @@ class BaseModel(models.Model): super().save(*args, **kwargs) def get_full_url(self): + #ymq:生成包含域名的完整URL site = get_current_site().domain url = "https://{site}{path}".format(site=site, path=self.get_absolute_url()) return url class Meta: - abstract = True + abstract = True # 声明为抽象模型,不生成数据库表 @abstractmethod def get_absolute_url(self): + #ymq:抽象方法,子类必须实现,用于生成模型实例的URL pass class Article(BaseModel): - """文章""" + """文章模型""" + # 状态选项:草稿/已发布 STATUS_CHOICES = ( ('d', _('Draft')), ('p', _('Published')), ) + # 评论状态选项:开启/关闭 COMMENT_STATUS = ( ('o', _('Open')), ('c', _('Close')), ) + # 类型选项:文章/页面 TYPE = ( ('a', _('Article')), ('p', _('Page')), ) - title = models.CharField(_('title'), max_length=200, unique=True) - body = MDTextField(_('body')) + + title = models.CharField(_('title'), max_length=200, unique=True) # 文章标题 + body = MDTextField(_('body')) # 文章内容(使用markdown编辑器) pub_time = models.DateTimeField( - _('publish time'), blank=False, null=False, default=now) + _('publish time'), blank=False, null=False, default=now) # 发布时间 status = models.CharField( _('status'), max_length=1, choices=STATUS_CHOICES, - default='p') + default='p') # 发布状态 comment_status = models.CharField( _('comment status'), max_length=1, choices=COMMENT_STATUS, - default='o') - type = models.CharField(_('type'), max_length=1, choices=TYPE, default='a') - views = models.PositiveIntegerField(_('views'), default=0) + default='o') # 评论状态 + type = models.CharField(_('type'), max_length=1, choices=TYPE, default='a') # 内容类型 + views = models.PositiveIntegerField(_('views'), default=0) # 浏览量 author = models.ForeignKey( settings.AUTH_USER_MODEL, verbose_name=_('author'), blank=False, null=False, - on_delete=models.CASCADE) + on_delete=models.CASCADE) # 关联作者(外键) article_order = models.IntegerField( - _('order'), blank=False, null=False, default=0) - show_toc = models.BooleanField(_('show toc'), blank=False, null=False, default=False) + _('order'), blank=False, null=False, default=0) # 排序序号 + show_toc = models.BooleanField(_('show toc'), blank=False, null=False, default=False) # 是否显示目录 category = models.ForeignKey( 'Category', verbose_name=_('category'), on_delete=models.CASCADE, blank=False, - null=False) - tags = models.ManyToManyField('Tag', verbose_name=_('tag'), blank=True) + null=False) # 关联分类(外键) + tags = models.ManyToManyField('Tag', verbose_name=_('tag'), blank=True) # 关联标签(多对多) def body_to_string(self): + #ymq:返回文章内容字符串 return self.body def __str__(self): + #ymq:模型实例的字符串表示(文章标题) return self.title class Meta: - ordering = ['-article_order', '-pub_time'] + ordering = ['-article_order', '-pub_time'] # 默认排序:先按排序号降序,再按发布时间降序 verbose_name = _('article') verbose_name_plural = verbose_name - get_latest_by = 'id' + get_latest_by = 'id' # 按id获取最新记录 def get_absolute_url(self): + #ymq:生成文章详情页的URL return reverse('blog:detailbyid', kwargs={ 'article_id': self.id, 'year': self.creation_time.year, @@ -125,21 +142,24 @@ class Article(BaseModel): 'day': self.creation_time.day }) - @cache_decorator(60 * 60 * 10) + @cache_decorator(60 * 60 * 10) # 缓存10小时 def get_category_tree(self): + #ymq:获取当前文章所属分类的层级结构(含父级分类) tree = self.category.get_category_tree() names = list(map(lambda c: (c.name, c.get_absolute_url()), tree)) - return names def save(self, *args, **kwargs): + #ymq:重写保存方法(可扩展自定义逻辑) super().save(*args, **kwargs) def viewed(self): + #ymq:增加浏览量并保存 self.views += 1 - self.save(update_fields=['views']) + self.save(update_fields=['views']) # 只更新views字段,提高性能 def comment_list(self): + #ymq:获取文章的评论列表(带缓存) cache_key = 'article_comments_{id}'.format(id=self.id) value = cache.get(cache_key) if value: @@ -147,67 +167,64 @@ class Article(BaseModel): return value else: comments = self.comment_set.filter(is_enable=True).order_by('-id') - cache.set(cache_key, comments, 60 * 100) + cache.set(cache_key, comments, 60 * 100) # 缓存100分钟 logger.info('set article comments:{id}'.format(id=self.id)) return comments def get_admin_url(self): + #ymq:生成文章在admin后台的编辑URL info = (self._meta.app_label, self._meta.model_name) return reverse('admin:%s_%s_change' % info, args=(self.pk,)) - @cache_decorator(expiration=60 * 100) + @cache_decorator(expiration=60 * 100) # 缓存100分钟 def next_article(self): - # 下一篇 + #ymq:获取下一篇文章(ID更大的已发布文章) return Article.objects.filter( id__gt=self.id, status='p').order_by('id').first() - @cache_decorator(expiration=60 * 100) + @cache_decorator(expiration=60 * 100) # 缓存100分钟 def prev_article(self): - # 前一篇 + #ymq:获取上一篇文章(ID更小的已发布文章) return Article.objects.filter(id__lt=self.id, status='p').first() def get_first_image_url(self): - """ - Get the first image url from article.body. - :return: - """ - match = re.search(r'!\[.*?\]\((.+?)\)', self.body) + """从文章内容中提取第一张图片的URL""" + match = re.search(r'!\[.*?\]\((.+?)\)', self.body) # 匹配markdown图片语法 if match: return match.group(1) return "" class Category(BaseModel): - """文章分类""" - name = models.CharField(_('category name'), max_length=30, unique=True) + """文章分类模型""" + name = models.CharField(_('category name'), max_length=30, unique=True) # 分类名称 parent_category = models.ForeignKey( 'self', verbose_name=_('parent category'), blank=True, null=True, - on_delete=models.CASCADE) - slug = models.SlugField(default='no-slug', max_length=60, blank=True) - index = models.IntegerField(default=0, verbose_name=_('index')) + on_delete=models.CASCADE) # 父分类(自关联,支持多级分类) + slug = models.SlugField(default='no-slug', max_length=60, blank=True) # URL友好化标识 + index = models.IntegerField(default=0, verbose_name=_('index')) # 排序索引 class Meta: - ordering = ['-index'] + ordering = ['-index'] # 按索引降序排列 verbose_name = _('category') verbose_name_plural = verbose_name def get_absolute_url(self): + #ymq:生成分类详情页的URL return reverse( 'blog:category_detail', kwargs={ 'category_name': self.slug}) def __str__(self): + #ymq:模型实例的字符串表示(分类名称) return self.name - @cache_decorator(60 * 60 * 10) + @cache_decorator(60 * 60 * 10) # 缓存10小时 def get_category_tree(self): - """ - 递归获得分类目录的父级 - :return: - """ + """递归获取当前分类的所有父级分类,形成层级结构""" categorys = [] def parse(category): @@ -218,12 +235,9 @@ class Category(BaseModel): parse(self) return categorys - @cache_decorator(60 * 60 * 10) + @cache_decorator(60 * 60 * 10) # 缓存10小时 def get_sub_categorys(self): - """ - 获得当前分类目录所有子集 - :return: - """ + """获取当前分类的所有子分类(含多级子分类)""" categorys = [] all_categorys = Category.objects.all() @@ -241,136 +255,143 @@ class Category(BaseModel): class Tag(BaseModel): - """文章标签""" - name = models.CharField(_('tag name'), max_length=30, unique=True) - slug = models.SlugField(default='no-slug', max_length=60, blank=True) + """文章标签模型""" + name = models.CharField(_('tag name'), max_length=30, unique=True) # 标签名称 + slug = models.SlugField(default='no-slug', max_length=60, blank=True) # URL友好化标识 def __str__(self): + #ymq:模型实例的字符串表示(标签名称) return self.name def get_absolute_url(self): + #ymq:生成标签详情页的URL return reverse('blog:tag_detail', kwargs={'tag_name': self.slug}) - @cache_decorator(60 * 60 * 10) + @cache_decorator(60 * 60 * 10) # 缓存10小时 def get_article_count(self): + #ymq:获取该标签关联的文章数量 return Article.objects.filter(tags__name=self.name).distinct().count() class Meta: - ordering = ['name'] + ordering = ['name'] # 按名称排序 verbose_name = _('tag') verbose_name_plural = verbose_name class Links(models.Model): - """友情链接""" - - name = models.CharField(_('link name'), max_length=30, unique=True) - link = models.URLField(_('link')) - sequence = models.IntegerField(_('order'), unique=True) + """友情链接模型""" + name = models.CharField(_('link name'), max_length=30, unique=True) # 链接名称 + link = models.URLField(_('link')) # 链接URL + sequence = models.IntegerField(_('order'), unique=True) # 排序序号 is_enable = models.BooleanField( - _('is show'), default=True, blank=False, null=False) + _('is show'), default=True, blank=False, null=False) # 是否显示 show_type = models.CharField( _('show type'), max_length=1, choices=LinkShowType.choices, - default=LinkShowType.I) - creation_time = models.DateTimeField(_('creation time'), default=now) - last_mod_time = models.DateTimeField(_('modify time'), default=now) + default=LinkShowType.I) # 展示位置 + creation_time = models.DateTimeField(_('creation time'), default=now) # 创建时间 + last_mod_time = models.DateTimeField(_('modify time'), default=now) # 最后修改时间 class Meta: - ordering = ['sequence'] + ordering = ['sequence'] # 按排序序号排列 verbose_name = _('link') verbose_name_plural = verbose_name def __str__(self): + #ymq:模型实例的字符串表示(链接名称) return self.name class SideBar(models.Model): - """侧边栏,可以展示一些html内容""" - name = models.CharField(_('title'), max_length=100) - content = models.TextField(_('content')) - sequence = models.IntegerField(_('order'), unique=True) - is_enable = models.BooleanField(_('is enable'), default=True) - creation_time = models.DateTimeField(_('creation time'), default=now) - last_mod_time = models.DateTimeField(_('modify time'), default=now) + """侧边栏模型(可展示自定义HTML内容)""" + name = models.CharField(_('title'), max_length=100) # 侧边栏标题 + content = models.TextField(_('content')) # 侧边栏内容(HTML) + sequence = models.IntegerField(_('order'), unique=True) # 排序序号 + is_enable = models.BooleanField(_('is enable'), default=True) # 是否启用 + creation_time = models.DateTimeField(_('creation time'), default=now) # 创建时间 + last_mod_time = models.DateTimeField(_('modify time'), default=now) # 最后修改时间 class Meta: - ordering = ['sequence'] + ordering = ['sequence'] # 按排序序号排列 verbose_name = _('sidebar') verbose_name_plural = verbose_name def __str__(self): + #ymq:模型实例的字符串表示(侧边栏标题) return self.name class BlogSettings(models.Model): - """blog的配置""" + """博客全局配置模型""" site_name = models.CharField( _('site name'), max_length=200, null=False, blank=False, - default='') + default='') # 网站名称 site_description = models.TextField( _('site description'), max_length=1000, null=False, blank=False, - default='') + default='') # 网站描述 site_seo_description = models.TextField( - _('site seo description'), max_length=1000, null=False, blank=False, default='') + _('site seo description'), max_length=1000, null=False, blank=False, default='') # SEO描述 site_keywords = models.TextField( _('site keywords'), max_length=1000, null=False, blank=False, - default='') - article_sub_length = models.IntegerField(_('article sub length'), default=300) - sidebar_article_count = models.IntegerField(_('sidebar article count'), default=10) - sidebar_comment_count = models.IntegerField(_('sidebar comment count'), default=5) - article_comment_count = models.IntegerField(_('article comment count'), default=5) - show_google_adsense = models.BooleanField(_('show adsense'), default=False) + default='') # 网站关键词 + article_sub_length = models.IntegerField(_('article sub length'), default=300) # 文章摘要长度 + sidebar_article_count = models.IntegerField(_('sidebar article count'), default=10) # 侧边栏文章数量 + sidebar_comment_count = models.IntegerField(_('sidebar comment count'), default=5) # 侧边栏评论数量 + article_comment_count = models.IntegerField(_('article comment count'), default=5) # 文章页评论数量 + show_google_adsense = models.BooleanField(_('show adsense'), default=False) # 是否显示谷歌广告 google_adsense_codes = models.TextField( - _('adsense code'), max_length=2000, null=True, blank=True, default='') - open_site_comment = models.BooleanField(_('open site comment'), default=True) - global_header = models.TextField("公共头部", null=True, blank=True, default='') - global_footer = models.TextField("公共尾部", null=True, blank=True, default='') + _('adsense code'), max_length=2000, null=True, blank=True, default='') # 谷歌广告代码 + open_site_comment = models.BooleanField(_('open site comment'), default=True) # 是否开启网站评论 + global_header = models.TextField("公共头部", null=True, blank=True, default='') # 全局头部代码 + global_footer = models.TextField("公共尾部", null=True, blank=True, default='') # 全局尾部代码 beian_code = models.CharField( '备案号', max_length=2000, null=True, blank=True, - default='') + default='') # 网站备案号 analytics_code = models.TextField( "网站统计代码", max_length=1000, null=False, blank=False, - default='') + default='') # 统计分析代码 show_gongan_code = models.BooleanField( - '是否显示公安备案号', default=False, null=False) + '是否显示公安备案号', default=False, null=False) # 是否显示公安备案号 gongan_beiancode = models.TextField( '公安备案号', max_length=2000, null=True, blank=True, - default='') + default='') # 公安备案号 comment_need_review = models.BooleanField( - '评论是否需要审核', default=False, null=False) + '评论是否需要审核', default=False, null=False) # 评论是否需要审核 class Meta: verbose_name = _('Website configuration') verbose_name_plural = verbose_name def __str__(self): + #ymq:模型实例的字符串表示(网站名称) return self.site_name def clean(self): + #ymq:数据验证,确保全局配置只能有一条记录 if BlogSettings.objects.exclude(id=self.id).count(): raise ValidationError(_('There can only be one configuration')) def save(self, *args, **kwargs): + #ymq:保存配置后清除缓存,确保配置立即生效 super().save(*args, **kwargs) from djangoblog.utils import cache - cache.clear() + cache.clear() \ No newline at end of file diff --git a/src/django-master/blog/search_indexes.py b/src/django-master/blog/search_indexes.py index 7f1dfac..f492392 100644 --- a/src/django-master/blog/search_indexes.py +++ b/src/django-master/blog/search_indexes.py @@ -1,13 +1,20 @@ from haystack import indexes +#ymq:导入Haystack的indexes模块,用于定义搜索索引 from blog.models import Article +#ymq:从blog应用导入Article模型,为其创建搜索索引 class ArticleIndex(indexes.SearchIndex, indexes.Indexable): + #ymq:定义文章搜索索引类,继承自SearchIndex和Indexable + #ymq: document=True表示该字段是主要搜索字段,use_template=True表示使用模板定义字段内容 text = indexes.CharField(document=True, use_template=True) def get_model(self): + #ymq:指定该索引对应的模型 return Article def index_queryset(self, using=None): - return self.get_model().objects.filter(status='p') + #ymq:定义需要被索引的数据集 + #ymq: 只索引状态为'p'(已发布)的文章 + return self.get_model().objects.filter(status='p') \ No newline at end of file diff --git a/src/django-master/blog/templatetags/blog_tags.py b/src/django-master/blog/templatetags/blog_tags.py index d6cd5d5..087c485 100644 --- a/src/django-master/blog/templatetags/blog_tags.py +++ b/src/django-master/blog/templatetags/blog_tags.py @@ -23,15 +23,18 @@ from djangoblog.plugin_manage import hooks logger = logging.getLogger(__name__) register = template.Library() +#ymq:注册模板标签库,用于在Django模板中使用自定义标签和过滤器 @register.simple_tag(takes_context=True) def head_meta(context): + #ymq:自定义简单标签,用于生成页面头部元信息(通过插件钩子处理) return mark_safe(hooks.apply_filters('head_meta', '', context)) @register.simple_tag def timeformat(data): + #ymq:格式化时间(仅时间部分),使用settings中定义的TIME_FORMAT try: return data.strftime(settings.TIME_FORMAT) except Exception as e: @@ -41,6 +44,7 @@ def timeformat(data): @register.simple_tag def datetimeformat(data): + #ymq:格式化日期时间,使用settings中定义的DATE_TIME_FORMAT try: return data.strftime(settings.DATE_TIME_FORMAT) except Exception as e: @@ -51,11 +55,13 @@ def datetimeformat(data): @register.filter() @stringfilter def custom_markdown(content): + #ymq:将内容转换为Markdown格式并标记为安全HTML(用于文章内容) return mark_safe(CommonMarkdown.get_markdown(content)) @register.simple_tag def get_markdown_toc(content): + #ymq:获取Markdown内容的目录(TOC)并标记为安全HTML from djangoblog.utils import CommonMarkdown body, toc = CommonMarkdown.get_markdown_with_toc(content) return mark_safe(toc) @@ -64,6 +70,7 @@ def get_markdown_toc(content): @register.filter() @stringfilter def comment_markdown(content): + #ymq:处理评论内容的Markdown转换,并过滤不安全HTML标签 content = CommonMarkdown.get_markdown(content) return mark_safe(sanitize_html(content)) @@ -76,6 +83,7 @@ def truncatechars_content(content): :param content: :return: """ + #ymq:按网站设置的长度截断文章内容(保留HTML标签) from django.template.defaultfilters import truncatechars_html from djangoblog.utils import get_blog_setting blogsetting = get_blog_setting() @@ -85,8 +93,8 @@ def truncatechars_content(content): @register.filter(is_safe=True) @stringfilter def truncate(content): + #ymq:截断内容为150字符并去除HTML标签(用于生成纯文本摘要) from django.utils.html import strip_tags - return strip_tags(content)[:150] @@ -97,12 +105,13 @@ def load_breadcrumb(article): :param article: :return: """ + #ymq:生成文章面包屑导航数据,包含分类层级和网站名称 names = article.get_category_tree() from djangoblog.utils import get_blog_setting blogsetting = get_blog_setting() site = get_current_site().domain names.append((blogsetting.site_name, '/')) - names = names[::-1] + names = names[::-1] # 反转列表,使层级从网站到当前分类 return { 'names': names, @@ -118,6 +127,7 @@ def load_articletags(article): :param article: :return: """ + #ymq:获取文章关联的标签列表,包含标签URL、文章数和随机样式 tags = article.tags.all() tags_list = [] for tag in tags: @@ -137,6 +147,7 @@ def load_sidebar(user, linktype): 加载侧边栏 :return: """ + #ymq:加载侧边栏数据(带缓存),包含文章列表、分类、标签等 value = cache.get("sidebar" + linktype) if value: value['user'] = user @@ -145,6 +156,7 @@ def load_sidebar(user, linktype): logger.info('load sidebar') from djangoblog.utils import get_blog_setting blogsetting = get_blog_setting() + # 获取最近文章、分类、热门文章等数据 recent_articles = Article.objects.filter( status='p')[:blogsetting.sidebar_article_count] sidebar_categorys = Category.objects.all() @@ -157,8 +169,8 @@ def load_sidebar(user, linktype): Q(show_type=str(linktype)) | Q(show_type=LinkShowType.A)) commment_list = Comment.objects.filter(is_enable=True).order_by( '-id')[:blogsetting.sidebar_comment_count] - # 标签云 计算字体大小 - # 根据总数计算出平均值 大小为 (数目/平均值)*步长 + + # 处理标签云(按文章数计算字体大小) increment = 5 tags = Tag.objects.all() sidebar_tags = None @@ -166,7 +178,6 @@ def load_sidebar(user, linktype): s = [t for t in [(t, t.get_article_count()) for t in tags] if t[1]] count = sum([t[1] for t in s]) dd = 1 if (count == 0 or not len(tags)) else count / len(tags) - import random sidebar_tags = list( map(lambda x: (x[0], x[1], (x[1] / dd) * increment + 10), s)) random.shuffle(sidebar_tags) @@ -185,6 +196,7 @@ def load_sidebar(user, linktype): 'sidebar_tags': sidebar_tags, 'extra_sidebars': extra_sidebars } + # 缓存侧边栏数据3小时 cache.set("sidebar" + linktype, value, 60 * 60 * 60 * 3) logger.info('set sidebar cache.key:{key}'.format(key="sidebar" + linktype)) value['user'] = user @@ -198,6 +210,7 @@ def load_article_metas(article, user): :param article: :return: """ + #ymq:加载文章元信息(作者、发布时间等)供模板使用 return { 'article': article, 'user': user @@ -206,9 +219,11 @@ def load_article_metas(article, user): @register.inclusion_tag('blog/tags/article_pagination.html') def load_pagination_info(page_obj, page_type, tag_name): + #ymq:生成分页导航链接,支持首页、标签、作者、分类等不同页面类型 previous_url = '' next_url = '' if page_type == '': + # 首页分页 if page_obj.has_next(): next_number = page_obj.next_page_number() next_url = reverse('blog:index_page', kwargs={'page': next_number}) @@ -218,6 +233,7 @@ def load_pagination_info(page_obj, page_type, tag_name): 'blog:index_page', kwargs={ 'page': previous_number}) if page_type == '分类标签归档': + # 标签页分页 tag = get_object_or_404(Tag, name=tag_name) if page_obj.has_next(): next_number = page_obj.next_page_number() @@ -234,6 +250,7 @@ def load_pagination_info(page_obj, page_type, tag_name): 'page': previous_number, 'tag_name': tag.slug}) if page_type == '作者文章归档': + # 作者页分页 if page_obj.has_next(): next_number = page_obj.next_page_number() next_url = reverse( @@ -250,6 +267,7 @@ def load_pagination_info(page_obj, page_type, tag_name): 'author_name': tag_name}) if page_type == '分类目录归档': + # 分类页分页 category = get_object_or_404(Category, name=tag_name) if page_obj.has_next(): next_number = page_obj.next_page_number() @@ -281,6 +299,7 @@ def load_article_detail(article, isindex, user): :param isindex:是否列表页,若是列表页只显示摘要 :return: """ + #ymq:加载文章详情数据,区分列表页(显示摘要)和详情页(显示全文) from djangoblog.utils import get_blog_setting blogsetting = get_blog_setting() @@ -292,35 +311,35 @@ def load_article_detail(article, isindex, user): } -# return only the URL of the gravatar -# TEMPLATE USE: {{ email|gravatar_url:150 }} @register.filter def gravatar_url(email, size=40): - """获得gravatar头像""" + """获得gravatar头像URL""" + #ymq:获取用户头像URL(优先使用第三方登录头像,否则使用Gravatar) cachekey = 'gravatat/' + email url = cache.get(cachekey) if url: return url else: + # 检查是否有第三方登录用户的头像 usermodels = OAuthUser.objects.filter(email=email) if usermodels: o = list(filter(lambda x: x.picture is not None, usermodels)) if o: return o[0].picture + # 生成Gravatar头像URL email = email.encode('utf-8') - - default = static('blog/img/avatar.png') - + default = static('blog/img/avatar.png') # 默认头像 url = "https://www.gravatar.com/avatar/%s?%s" % (hashlib.md5( email.lower()).hexdigest(), urllib.parse.urlencode({'d': default, 's': str(size)})) - cache.set(cachekey, url, 60 * 60 * 10) + cache.set(cachekey, url, 60 * 60 * 10) # 缓存头像URL 10小时 logger.info('set gravatar cache.key:{key}'.format(key=cachekey)) return url @register.filter def gravatar(email, size=40): - """获得gravatar头像""" + """获得gravatar头像img标签""" + #ymq:生成头像img标签(调用gravatar_url获取URL) url = gravatar_url(email, size) return mark_safe( '' % @@ -335,10 +354,12 @@ def query(qs, **kwargs): ... {% endfor %} """ - return qs.filter(**kwargs) + #ymq:模板中过滤查询集的标签(支持动态传参过滤) + return qs.filter(** kwargs) @register.filter def addstr(arg1, arg2): """concatenate arg1 & arg2""" - return str(arg1) + str(arg2) + #ymq:字符串拼接过滤器(将两个参数转换为字符串并拼接) + return str(arg1) + str(arg2) \ No newline at end of file diff --git a/src/django-master/blog/tests.py b/src/django-master/blog/tests.py index ee13505..fd67d7d 100644 --- a/src/django-master/blog/tests.py +++ b/src/django-master/blog/tests.py @@ -1,73 +1,101 @@ import os +#ymq:导入os模块,用于文件路径和文件操作 from django.conf import settings from django.core.files.uploadedfile import SimpleUploadedFile +#ymq:导入文件上传相关类,用于模拟文件上传测试 from django.core.management import call_command +#ymq:导入call_command,用于调用Django管理命令 from django.core.paginator import Paginator +#ymq:导入分页类,用于测试分页功能 from django.templatetags.static import static +#ymq:导入static标签,用于获取静态文件路径 from django.test import Client, RequestFactory, TestCase +#ymq:导入测试相关类,Client用于模拟HTTP请求,TestCase提供测试框架 from django.urls import reverse +#ymq:导入reverse,用于反向解析URL from django.utils import timezone +#ymq:导入timezone,用于处理时间相关测试数据 from accounts.models import BlogUser +#ymq:从accounts应用导入用户模型 from blog.forms import BlogSearchForm +#ymq:从blog应用导入搜索表单 from blog.models import Article, Category, Tag, SideBar, Links +#ymq:从blog应用导入模型类,用于测试数据创建和查询 from blog.templatetags.blog_tags import load_pagination_info, load_articletags +#ymq:导入自定义模板标签函数,用于测试模板标签功能 from djangoblog.utils import get_current_site, get_sha256 +#ymq:导入工具函数,用于获取站点信息和加密 from oauth.models import OAuthUser, OAuthConfig +#ymq:从oauth应用导入模型,用于测试第三方登录相关功能 # Create your tests here. - class ArticleTest(TestCase): + #ymq:定义文章相关的测试类,继承自TestCase def setUp(self): - self.client = Client() - self.factory = RequestFactory() + #ymq:测试前置方法,在每个测试方法执行前运行,初始化测试客户端和工厂 + self.client = Client() # 创建测试客户端,用于模拟HTTP请求 + self.factory = RequestFactory() # 创建请求工厂,用于构造请求对象 def test_validate_article(self): - site = get_current_site().domain + #ymq:测试文章相关功能的完整性,包括创建、查询、页面访问等 + site = get_current_site().domain # 获取当前站点域名 + # 创建或获取测试用户 user = BlogUser.objects.get_or_create( email="liangliangyy@gmail.com", username="liangliangyy")[0] - user.set_password("liangliangyy") - user.is_staff = True - user.is_superuser = True - user.save() + user.set_password("liangliangyy") # 设置用户密码 + user.is_staff = True # 设为 staff,允许访问admin + user.is_superuser = True # 设为超级用户 + user.save() # 保存用户 + + # 测试用户个人页面访问 response = self.client.get(user.get_absolute_url()) - self.assertEqual(response.status_code, 200) + self.assertEqual(response.status_code, 200) # 断言页面正常响应 + + # 测试admin相关页面访问(未登录状态) response = self.client.get('/admin/servermanager/emailsendlog/') response = self.client.get('admin/admin/logentry/') + + # 创建侧边栏测试数据 s = SideBar() s.sequence = 1 s.name = 'test' s.content = 'test content' s.is_enable = True s.save() - + + # 创建分类测试数据 category = Category() category.name = "category" category.creation_time = timezone.now() category.last_mod_time = timezone.now() category.save() - + + # 创建标签测试数据 tag = Tag() tag.name = "nicetag" tag.save() - + + # 创建文章测试数据 article = Article() article.title = "nicetitle" article.body = "nicecontent" article.author = user article.category = category - article.type = 'a' - article.status = 'p' - + article.type = 'a' # 类型为文章 + article.status = 'p' # 状态为已发布 article.save() - self.assertEqual(0, article.tags.count()) - article.tags.add(tag) + + # 测试文章标签关联 + self.assertEqual(0, article.tags.count()) # 初始无标签 + article.tags.add(tag) # 添加标签 article.save() - self.assertEqual(1, article.tags.count()) - + self.assertEqual(1, article.tags.count()) # 断言标签已添加 + + # 批量创建文章(用于测试分页) for i in range(20): article = Article() article.title = "nicetitle" + str(i) @@ -79,56 +107,73 @@ class ArticleTest(TestCase): article.save() article.tags.add(tag) article.save() + + # 测试Elasticsearch搜索功能(如果启用) from blog.documents import ELASTICSEARCH_ENABLED if ELASTICSEARCH_ENABLED: - call_command("build_index") - response = self.client.get('/search', {'q': 'nicetitle'}) - self.assertEqual(response.status_code, 200) - + call_command("build_index") # 调用命令构建索引 + response = self.client.get('/search', {'q': 'nicetitle'}) # 模拟搜索请求 + self.assertEqual(response.status_code, 200) # 断言搜索页面正常响应 + + # 测试文章详情页访问 response = self.client.get(article.get_absolute_url()) self.assertEqual(response.status_code, 200) + + # 测试蜘蛛通知功能 from djangoblog.spider_notify import SpiderNotify - SpiderNotify.notify(article.get_absolute_url()) + SpiderNotify.notify(article.get_absolute_url()) # 通知搜索引擎 + + # 测试标签页访问 response = self.client.get(tag.get_absolute_url()) self.assertEqual(response.status_code, 200) - + + # 测试分类页访问 response = self.client.get(category.get_absolute_url()) self.assertEqual(response.status_code, 200) - + + # 测试搜索功能 response = self.client.get('/search', {'q': 'django'}) self.assertEqual(response.status_code, 200) + + # 测试文章模板标签 s = load_articletags(article) - self.assertIsNotNone(s) - + self.assertIsNotNone(s) # 断言标签返回非空 + + # 用户登录 self.client.login(username='liangliangyy', password='liangliangyy') - + + # 测试归档页面访问 response = self.client.get(reverse('blog:archives')) self.assertEqual(response.status_code, 200) - + + # 测试不同类型的分页功能 p = Paginator(Article.objects.all(), settings.PAGINATE_BY) - self.check_pagination(p, '', '') - + self.check_pagination(p, '', '') # 全部文章分页 + p = Paginator(Article.objects.filter(tags=tag), settings.PAGINATE_BY) - self.check_pagination(p, '分类标签归档', tag.slug) - + self.check_pagination(p, '分类标签归档', tag.slug) # 标签文章分页 + p = Paginator( Article.objects.filter( author__username='liangliangyy'), settings.PAGINATE_BY) - self.check_pagination(p, '作者文章归档', 'liangliangyy') - + self.check_pagination(p, '作者文章归档', 'liangliangyy') # 作者文章分页 + p = Paginator(Article.objects.filter(category=category), settings.PAGINATE_BY) - self.check_pagination(p, '分类目录归档', category.slug) - + self.check_pagination(p, '分类目录归档', category.slug) # 分类文章分页 + + # 测试搜索表单 f = BlogSearchForm() - f.search() - # self.client.login(username='liangliangyy', password='liangliangyy') - from djangoblog.spider_notify import SpiderNotify + f.search() # 调用搜索方法 + + # 测试百度蜘蛛通知 SpiderNotify.baidu_notify([article.get_full_url()]) - + + # 测试头像相关模板标签 from blog.templatetags.blog_tags import gravatar_url, gravatar - u = gravatar_url('liangliangyy@gmail.com') - u = gravatar('liangliangyy@gmail.com') - + u = gravatar_url('liangliangyy@gmail.com') # 获取头像URL + u = gravatar('liangliangyy@gmail.com') # 生成头像HTML + + # 测试友情链接页面 link = Links( sequence=1, name="lylinux", @@ -136,57 +181,75 @@ class ArticleTest(TestCase): link.save() response = self.client.get('/links.html') self.assertEqual(response.status_code, 200) - + + # 测试RSS订阅和站点地图 response = self.client.get('/feed/') self.assertEqual(response.status_code, 200) - response = self.client.get('/sitemap.xml') self.assertEqual(response.status_code, 200) - + + # 测试admin操作(删除文章、访问日志) self.client.get("/admin/blog/article/1/delete/") self.client.get('/admin/servermanager/emailsendlog/') self.client.get('/admin/admin/logentry/') self.client.get('/admin/admin/logentry/1/change/') def check_pagination(self, p, type, value): + #ymq:测试分页功能的辅助方法 for page in range(1, p.num_pages + 1): + # 调用分页模板标签获取分页信息 s = load_pagination_info(p.page(page), type, value) - self.assertIsNotNone(s) + self.assertIsNotNone(s) # 断言分页信息非空 + # 测试上一页链接 if s['previous_url']: response = self.client.get(s['previous_url']) self.assertEqual(response.status_code, 200) + # 测试下一页链接 if s['next_url']: response = self.client.get(s['next_url']) self.assertEqual(response.status_code, 200) def test_image(self): + #ymq:测试图片上传功能 import requests + # 下载测试图片 rsp = requests.get( 'https://www.python.org/static/img/python-logo.png') - imagepath = os.path.join(settings.BASE_DIR, 'python.png') + imagepath = os.path.join(settings.BASE_DIR, 'python.png') # 保存路径 with open(imagepath, 'wb') as file: - file.write(rsp.content) + file.write(rsp.content) # 保存图片 + + # 测试未授权上传 rsp = self.client.post('/upload') - self.assertEqual(rsp.status_code, 403) + self.assertEqual(rsp.status_code, 403) # 断言被拒绝 + + # 生成上传签名(模拟授权) sign = get_sha256(get_sha256(settings.SECRET_KEY)) + # 模拟带签名的上传请求 with open(imagepath, 'rb') as file: imgfile = SimpleUploadedFile( 'python.png', file.read(), content_type='image/jpg') form_data = {'python.png': imgfile} rsp = self.client.post( '/upload?sign=' + sign, form_data, follow=True) - self.assertEqual(rsp.status_code, 200) - os.remove(imagepath) + self.assertEqual(rsp.status_code, 200) # 断言上传成功 + + os.remove(imagepath) # 清理测试文件 + + # 测试用户头像保存和邮件发送工具函数 from djangoblog.utils import save_user_avatar, send_email - send_email(['qq@qq.com'], 'testTitle', 'testContent') + send_email(['qq@qq.com'], 'testTitle', 'testContent') # 测试发送邮件 save_user_avatar( - 'https://www.python.org/static/img/python-logo.png') + 'https://www.python.org/static/img/python-logo.png') # 测试保存头像 def test_errorpage(self): - rsp = self.client.get('/eee') - self.assertEqual(rsp.status_code, 404) + #ymq:测试错误页面(404) + rsp = self.client.get('/eee') # 访问不存在的URL + self.assertEqual(rsp.status_code, 404) # 断言返回404 def test_commands(self): + #ymq:测试Django管理命令 + # 创建测试用户 user = BlogUser.objects.get_or_create( email="liangliangyy@gmail.com", username="liangliangyy")[0] @@ -194,13 +257,15 @@ class ArticleTest(TestCase): user.is_staff = True user.is_superuser = True user.save() - + + # 创建OAuth配置 c = OAuthConfig() c.type = 'qq' c.appkey = 'appkey' c.appsecret = 'appsecret' c.save() - + + # 创建OAuth用户关联 u = OAuthUser() u.type = 'qq' u.openid = 'openid' @@ -211,7 +276,8 @@ class ArticleTest(TestCase): "figureurl": "https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30" }''' u.save() - + + # 创建另一个OAuth用户 u = OAuthUser() u.type = 'qq' u.openid = 'openid1' @@ -221,12 +287,15 @@ class ArticleTest(TestCase): "figureurl": "https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30" }''' u.save() - + + # 测试Elasticsearch索引构建命令(如果启用) from blog.documents import ELASTICSEARCH_ENABLED if ELASTICSEARCH_ENABLED: call_command("build_index") - call_command("ping_baidu", "all") - call_command("create_testdata") - call_command("clear_cache") - call_command("sync_user_avatar") - call_command("build_search_words") + + # 测试其他管理命令 + call_command("ping_baidu", "all") # 百度ping通知 + call_command("create_testdata") # 创建测试数据 + call_command("clear_cache") # 清理缓存 + call_command("sync_user_avatar") # 同步用户头像 + call_command("build_search_words") # 构建搜索词 \ No newline at end of file diff --git a/src/django-master/blog/urls.py b/src/django-master/blog/urls.py index adf2703..966e0d4 100644 --- a/src/django-master/blog/urls.py +++ b/src/django-master/blog/urls.py @@ -1,62 +1,92 @@ from django.urls import path +#ymq:导入Django的path函数,用于定义URL路由 from django.views.decorators.cache import cache_page +#ymq:导入缓存装饰器,用于对视图进行缓存 from . import views +#ymq:从当前应用导入views模块,引用视图函数/类 app_name = "blog" +#ymq:定义应用命名空间,避免URL名称冲突 + urlpatterns = [ path( r'', views.IndexView.as_view(), name='index'), + #ymq:首页URL,映射到IndexView视图类,名称为'index' + path( r'page//', views.IndexView.as_view(), name='index_page'), + #ymq:分页首页URL,接收整数类型的page参数,名称为'index_page' + path( r'article////.html', views.ArticleDetailView.as_view(), name='detailbyid'), + #ymq:文章详情页URL,接收年、月、日、文章ID参数,名称为'detailbyid' + path( r'category/.html', views.CategoryDetailView.as_view(), name='category_detail'), + #ymq:分类详情页URL,接收slug类型的分类名称参数,名称为'category_detail' + path( r'category//.html', views.CategoryDetailView.as_view(), name='category_detail_page'), + #ymq:分类分页详情页URL,接收分类名称和页码参数,名称为'category_detail_page' + path( r'author/.html', views.AuthorDetailView.as_view(), name='author_detail'), + #ymq:作者详情页URL,接收作者名称参数,名称为'author_detail' + path( r'author//.html', views.AuthorDetailView.as_view(), name='author_detail_page'), + #ymq:作者分页详情页URL,接收作者名称和页码参数,名称为'author_detail_page' + path( r'tag/.html', views.TagDetailView.as_view(), name='tag_detail'), + #ymq:标签详情页URL,接收slug类型的标签名称参数,名称为'tag_detail' + path( r'tag//.html', views.TagDetailView.as_view(), name='tag_detail_page'), + #ymq:标签分页详情页URL,接收标签名称和页码参数,名称为'tag_detail_page' + path( 'archives.html', cache_page( 60 * 60)( views.ArchivesView.as_view()), name='archives'), + #ymq:归档页面URL,使用cache_page装饰器缓存1小时(60*60秒),名称为'archives' + path( 'links.html', views.LinkListView.as_view(), name='links'), + #ymq:友情链接页面URL,映射到LinkListView视图类,名称为'links' + path( r'upload', views.fileupload, name='upload'), + #ymq:文件上传URL,映射到fileupload视图函数,名称为'upload' + path( r'clean', views.clean_cache_view, name='clean'), -] + #ymq:清理缓存URL,映射到clean_cache_view视图函数,名称为'clean' +] \ No newline at end of file diff --git a/src/django-master/blog/views.py b/src/django-master/blog/views.py index d5dc7ec..01f69af 100644 --- a/src/django-master/blog/views.py +++ b/src/django-master/blog/views.py @@ -1,6 +1,7 @@ import logging import os import uuid +#ymq:导入日志、文件操作、UUID生成相关模块 from django.conf import settings from django.core.paginator import Paginator @@ -14,17 +15,24 @@ from django.views.decorators.csrf import csrf_exempt from django.views.generic.detail import DetailView from django.views.generic.list import ListView from haystack.views import SearchView +#ymq:导入Django核心组件、视图类、HTTP响应类等 from blog.models import Article, Category, LinkShowType, Links, Tag +#ymq:从blog应用导入模型类 from comments.forms import CommentForm +#ymq:从comments应用导入评论表单 from djangoblog.plugin_manage import hooks from djangoblog.plugin_manage.hook_constants import ARTICLE_CONTENT_HOOK_NAME +#ymq:导入插件钩子相关模块,用于扩展文章功能 from djangoblog.utils import cache, get_blog_setting, get_sha256 +#ymq:导入工具函数,用于缓存、获取博客设置和加密 logger = logging.getLogger(__name__) +#ymq:创建当前模块的日志记录器实例 class ArticleListView(ListView): + #ymq:文章列表基础视图类,继承自Django的ListView # template_name属性用于指定使用哪个模板进行渲染 template_name = 'blog/article_index.html' @@ -33,15 +41,17 @@ class ArticleListView(ListView): # 页面类型,分类目录或标签列表等 page_type = '' - paginate_by = settings.PAGINATE_BY - page_kwarg = 'page' - link_type = LinkShowType.L + paginate_by = settings.PAGINATE_BY # 分页大小,从配置中获取 + page_kwarg = 'page' # 页码参数名 + link_type = LinkShowType.L # 链接展示类型 def get_view_cache_key(self): + #ymq:获取视图缓存键(未实际使用,预留方法) return self.request.get['pages'] @property def page_number(self): + #ymq:获取当前页码(从URL参数或默认值) page_kwarg = self.page_kwarg page = self.kwargs.get( page_kwarg) or self.request.GET.get(page_kwarg) or 1 @@ -51,13 +61,13 @@ class ArticleListView(ListView): """ 子类重写.获得queryset的缓存key """ - raise NotImplementedError() + raise NotImplementedError() # 强制子类实现该方法 def get_queryset_data(self): """ 子类重写.获取queryset的数据 """ - raise NotImplementedError() + raise NotImplementedError() # 强制子类实现该方法 def get_queryset_from_cache(self, cache_key): ''' @@ -70,8 +80,8 @@ class ArticleListView(ListView): logger.info('get view cache.key:{key}'.format(key=cache_key)) return value else: - article_list = self.get_queryset_data() - cache.set(cache_key, article_list) + article_list = self.get_queryset_data() # 调用子类实现的方法获取数据 + cache.set(cache_key, article_list) # 存入缓存 logger.info('set view cache.key:{key}'.format(key=cache_key)) return article_list @@ -80,46 +90,53 @@ class ArticleListView(ListView): 重写默认,从缓存获取数据 :return: ''' - key = self.get_queryset_cache_key() - value = self.get_queryset_from_cache(key) + key = self.get_queryset_cache_key() # 获取缓存键 + value = self.get_queryset_from_cache(key) # 从缓存获取数据 return value def get_context_data(self, **kwargs): + #ymq:扩展上下文数据,添加链接类型 kwargs['linktype'] = self.link_type - return super(ArticleListView, self).get_context_data(**kwargs) + return super(ArticleListView, self).get_context_data(** kwargs) class IndexView(ArticleListView): ''' - 首页 + 首页视图 ''' - # 友情链接类型 + # 友情链接类型:首页展示 link_type = LinkShowType.I def get_queryset_data(self): + #ymq:获取首页文章列表(已发布的文章) article_list = Article.objects.filter(type='a', status='p') return article_list def get_queryset_cache_key(self): + #ymq:生成首页缓存键(包含页码) cache_key = 'index_{page}'.format(page=self.page_number) return cache_key class ArticleDetailView(DetailView): ''' - 文章详情页面 + 文章详情页面视图 ''' - template_name = 'blog/article_detail.html' - model = Article - pk_url_kwarg = 'article_id' - context_object_name = "article" + template_name = 'blog/article_detail.html' # 详情页模板 + model = Article # 关联模型 + pk_url_kwarg = 'article_id' # URL中主键参数名 + context_object_name = "article" # 模板中上下文变量名 def get_context_data(self, **kwargs): - comment_form = CommentForm() + #ymq:扩展文章详情页的上下文数据 + comment_form = CommentForm() # 初始化评论表单 + # 获取文章评论列表 article_comments = self.object.comment_list() - parent_comments = article_comments.filter(parent_comment=None) - blog_setting = get_blog_setting() + parent_comments = article_comments.filter(parent_comment=None) # 过滤顶级评论 + blog_setting = get_blog_setting() # 获取博客设置 + + # 评论分页处理 paginator = Paginator(parent_comments, blog_setting.article_comment_count) page = self.request.GET.get('comment_page', '1') if not page.isnumeric(): @@ -135,26 +152,32 @@ class ArticleDetailView(DetailView): next_page = p_comments.next_page_number() if p_comments.has_next() else None prev_page = p_comments.previous_page_number() if p_comments.has_previous() else None + # 生成评论分页链接 if next_page: kwargs[ 'comment_next_page_url'] = self.object.get_absolute_url() + f'?comment_page={next_page}#commentlist-container' if prev_page: kwargs[ 'comment_prev_page_url'] = self.object.get_absolute_url() + f'?comment_page={prev_page}#commentlist-container' + + # 向上下文添加数据 kwargs['form'] = comment_form kwargs['article_comments'] = article_comments kwargs['p_comments'] = p_comments kwargs['comment_count'] = len( article_comments) if article_comments else 0 + # 上一篇/下一篇文章 kwargs['next_article'] = self.object.next_article kwargs['prev_article'] = self.object.prev_article + # 调用父类方法获取基础上下文 context = super(ArticleDetailView, self).get_context_data(**kwargs) article = self.object - # Action Hook, 通知插件"文章详情已获取" + + # 触发插件钩子:文章详情已获取 hooks.run_action('after_article_body_get', article=article, request=self.request) - # # Filter Hook, 允许插件修改文章正文 + # 应用插件过滤器:修改文章正文 article.body = hooks.apply_filters(ARTICLE_CONTENT_HOOK_NAME, article.body, article=article, request=self.request) @@ -163,23 +186,27 @@ class ArticleDetailView(DetailView): class CategoryDetailView(ArticleListView): ''' - 分类目录列表 + 分类目录列表视图 ''' - page_type = "分类目录归档" + page_type = "分类目录归档" # 页面类型标识 def get_queryset_data(self): - slug = self.kwargs['category_name'] - category = get_object_or_404(Category, slug=slug) + #ymq:获取指定分类下的文章列表 + slug = self.kwargs['category_name'] # 从URL获取分类别名 + category = get_object_or_404(Category, slug=slug) # 获取分类对象 categoryname = category.name self.categoryname = categoryname + # 获取所有子分类名称 categorynames = list( map(lambda c: c.name, category.get_sub_categorys())) + # 查询属于当前分类及子分类的已发布文章 article_list = Article.objects.filter( category__name__in=categorynames, status='p') return article_list def get_queryset_cache_key(self): + #ymq:生成分类列表缓存键 slug = self.kwargs['category_name'] category = get_object_or_404(Category, slug=slug) categoryname = category.name @@ -189,59 +216,65 @@ class CategoryDetailView(ArticleListView): return cache_key def get_context_data(self, **kwargs): - + #ymq:扩展分类页上下文数据 categoryname = self.categoryname try: - categoryname = categoryname.split('/')[-1] + categoryname = categoryname.split('/')[-1] # 处理多级分类名称 except BaseException: pass kwargs['page_type'] = CategoryDetailView.page_type kwargs['tag_name'] = categoryname - return super(CategoryDetailView, self).get_context_data(**kwargs) + return super(CategoryDetailView, self).get_context_data(** kwargs) class AuthorDetailView(ArticleListView): ''' - 作者详情页 + 作者详情页视图 ''' - page_type = '作者文章归档' + page_type = '作者文章归档' # 页面类型标识 def get_queryset_cache_key(self): + #ymq:生成作者文章列表缓存键 from uuslug import slugify - author_name = slugify(self.kwargs['author_name']) + author_name = slugify(self.kwargs['author_name']) # 作者名转slug cache_key = 'author_{author_name}_{page}'.format( author_name=author_name, page=self.page_number) return cache_key def get_queryset_data(self): + #ymq:获取指定作者的文章列表 author_name = self.kwargs['author_name'] article_list = Article.objects.filter( - author__username=author_name, type='a', status='p') + author__username=author_name, type='a', status='p') # 过滤已发布的文章 return article_list def get_context_data(self, **kwargs): + #ymq:扩展作者页上下文数据 author_name = self.kwargs['author_name'] kwargs['page_type'] = AuthorDetailView.page_type kwargs['tag_name'] = author_name - return super(AuthorDetailView, self).get_context_data(**kwargs) + return super(AuthorDetailView, self).get_context_data(** kwargs) class TagDetailView(ArticleListView): ''' - 标签列表页面 + 标签列表页面视图 ''' - page_type = '分类标签归档' + page_type = '分类标签归档' # 页面类型标识 def get_queryset_data(self): - slug = self.kwargs['tag_name'] - tag = get_object_or_404(Tag, slug=slug) + #ymq:获取指定标签的文章列表 + slug = self.kwargs['tag_name'] # 从URL获取标签别名 + tag = get_object_or_404(Tag, slug=slug) # 获取标签对象 tag_name = tag.name self.name = tag_name + # 查询包含当前标签的已发布文章 article_list = Article.objects.filter( tags__name=tag_name, type='a', status='p') return article_list def get_queryset_cache_key(self): + #ymq:生成标签文章列表缓存键 slug = self.kwargs['tag_name'] tag = get_object_or_404(Tag, slug=slug) tag_name = tag.name @@ -251,101 +284,118 @@ class TagDetailView(ArticleListView): return cache_key def get_context_data(self, **kwargs): - # tag_name = self.kwargs['tag_name'] + #ymq:扩展标签页上下文数据 tag_name = self.name kwargs['page_type'] = TagDetailView.page_type kwargs['tag_name'] = tag_name - return super(TagDetailView, self).get_context_data(**kwargs) + return super(TagDetailView, self).get_context_data(** kwargs) class ArchivesView(ArticleListView): ''' - 文章归档页面 + 文章归档页面视图 ''' - page_type = '文章归档' - paginate_by = None - page_kwarg = None - template_name = 'blog/article_archives.html' + page_type = '文章归档' # 页面类型标识 + paginate_by = None # 不分页 + page_kwarg = None # 无页码参数 + template_name = 'blog/article_archives.html' # 归档页模板 def get_queryset_data(self): + #ymq:获取所有已发布文章(用于归档) return Article.objects.filter(status='p').all() def get_queryset_cache_key(self): + #ymq:生成归档页缓存键 cache_key = 'archives' return cache_key class LinkListView(ListView): - model = Links - template_name = 'blog/links_list.html' + #ymq:友情链接列表视图 + model = Links # 关联模型 + template_name = 'blog/links_list.html' # 链接列表模板 def get_queryset(self): + #ymq:只获取启用的友情链接 return Links.objects.filter(is_enable=True) class EsSearchView(SearchView): + #ymq:Elasticsearch搜索视图,继承自Haystack的SearchView def get_context(self): - paginator, page = self.build_page() + #ymq:构建搜索结果页面的上下文数据 + paginator, page = self.build_page() # 处理分页 context = { - "query": self.query, - "form": self.form, - "page": page, - "paginator": paginator, - "suggestion": None, + "query": self.query, # 搜索关键词 + "form": self.form, # 搜索表单 + "page": page, # 当前页数据 + "paginator": paginator, # 分页器 + "suggestion": None, # 搜索建议(默认无) } + # 如果启用拼写建议,添加建议内容 if hasattr(self.results, "query") and self.results.query.backend.include_spelling: context["suggestion"] = self.results.query.get_spelling_suggestion() - context.update(self.extra_context()) + context.update(self.extra_context()) # 添加额外上下文 return context -@csrf_exempt +@csrf_exempt # 禁用CSRF保护(用于外部调用) def fileupload(request): """ - 该方法需自己写调用端来上传图片,该方法仅提供图床功能 + 图片/文件上传接口,需验证签名 :param request: :return: """ if request.method == 'POST': - sign = request.GET.get('sign', None) + sign = request.GET.get('sign', None) # 获取签名参数 if not sign: - return HttpResponseForbidden() + return HttpResponseForbidden() # 无签名则拒绝 + # 验证签名(双重SHA256加密对比) if not sign == get_sha256(get_sha256(settings.SECRET_KEY)): - return HttpResponseForbidden() - response = [] + return HttpResponseForbidden() # 签名错误则拒绝 + + response = [] # 存储上传后的文件URL for filename in request.FILES: - timestr = timezone.now().strftime('%Y/%m/%d') - imgextensions = ['jpg', 'png', 'jpeg', 'bmp'] + timestr = timezone.now().strftime('%Y/%m/%d') # 按日期组织文件 + imgextensions = ['jpg', 'png', 'jpeg', 'bmp'] # 图片扩展名 fname = u''.join(str(filename)) + # 判断是否为图片 isimage = len([i for i in imgextensions if fname.find(i) >= 0]) > 0 + # 确定存储目录(图片/文件分开存储) base_dir = os.path.join(settings.STATICFILES, "files" if not isimage else "image", timestr) if not os.path.exists(base_dir): - os.makedirs(base_dir) + os.makedirs(base_dir) # 目录不存在则创建 + # 生成唯一文件名(UUID+原扩展名) savepath = os.path.normpath(os.path.join(base_dir, f"{uuid.uuid4().hex}{os.path.splitext(filename)[-1]}")) + # 安全校验:防止路径遍历攻击 if not savepath.startswith(base_dir): return HttpResponse("only for post") + # 保存文件 with open(savepath, 'wb+') as wfile: for chunk in request.FILES[filename].chunks(): wfile.write(chunk) + # 图片压缩处理 if isimage: from PIL import Image image = Image.open(savepath) - image.save(savepath, quality=20, optimize=True) + image.save(savepath, quality=20, optimize=True) # 压缩质量为20 + # 生成文件访问URL url = static(savepath) response.append(url) - return HttpResponse(response) + return HttpResponse(response) # 返回所有上传文件的URL else: - return HttpResponse("only for post") + return HttpResponse("only for post") # 只允许POST方法 def page_not_found_view( request, exception, template_name='blog/error_page.html'): + #ymq:404错误处理视图 if exception: - logger.error(exception) + logger.error(exception) # 记录错误日志 url = request.get_full_path() return render(request, template_name, @@ -355,6 +405,7 @@ def page_not_found_view( def server_error_view(request, template_name='blog/error_page.html'): + #ymq:500错误处理视图 return render(request, template_name, {'message': _('Sorry, the server is busy, please click the home page to see other?'), @@ -366,8 +417,9 @@ def permission_denied_view( request, exception, template_name='blog/error_page.html'): + #ymq:403错误处理视图 if exception: - logger.error(exception) + logger.error(exception) # 记录错误日志 return render( request, template_name, { 'message': _('Sorry, you do not have permission to access this page?'), @@ -375,5 +427,6 @@ def permission_denied_view( def clean_cache_view(request): - cache.clear() - return HttpResponse('ok') + #ymq:清理缓存的视图 + cache.clear() # 清除所有缓存 + return HttpResponse('ok') # 返回成功响应 \ No newline at end of file