diff --git a/src/DjangoBlog/blog/__pycache__/admin.cpython-310.pyc b/src/DjangoBlog/blog/__pycache__/admin.cpython-310.pyc
index e2d818b..478ab3c 100644
Binary files a/src/DjangoBlog/blog/__pycache__/admin.cpython-310.pyc and b/src/DjangoBlog/blog/__pycache__/admin.cpython-310.pyc differ
diff --git a/src/DjangoBlog/blog/admin.py b/src/DjangoBlog/blog/admin.py
index 46c3420..0396fc2 100644
--- a/src/DjangoBlog/blog/admin.py
+++ b/src/DjangoBlog/blog/admin.py
@@ -5,34 +5,39 @@ from django.urls import reverse
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
+# 注册你的模型到admin后台
# Register your models here.
from .models import Article
class ArticleForm(forms.ModelForm):
- # body = forms.CharField(widget=AdminPagedownWidget())
-
+ # 文章表单类,可在这里自定义文章模型对应的表单字段等,当前示例中暂时没有额外自定义字段(原body字段的AdminPagedownWidget注释掉了)
class Meta:
- model = Article
- fields = '__all__'
+ model = Article # 关联的模型是Article
+ fields = '__all__' # 表单包含模型的所有字段
+# 定义将选中文章发布的动作函数
def makr_article_publish(modeladmin, request, queryset):
- queryset.update(status='p')
+ queryset.update(status='p') # 将选中文章的状态更新为'p'(发布状态)
+# 定义将选中文章设为草稿的动作函数
def draft_article(modeladmin, request, queryset):
- queryset.update(status='d')
+ queryset.update(status='d') # 将选中文章的状态更新为'd'(草稿状态)
+# 定义关闭文章评论的动作函数
def close_article_commentstatus(modeladmin, request, queryset):
- queryset.update(comment_status='c')
+ queryset.update(comment_status='c') # 将选中文章的评论状态更新为'c'(关闭状态)
+# 定义开启文章评论的动作函数
def open_article_commentstatus(modeladmin, request, queryset):
- queryset.update(comment_status='o')
+ queryset.update(comment_status='o') # 将选中文章的评论状态更新为'o'(开启状态)
+# 为各个动作函数设置在admin界面显示的简短描述
makr_article_publish.short_description = _('Publish selected articles')
draft_article.short_description = _('Draft selected articles')
close_article_commentstatus.short_description = _('Close article comments')
@@ -40,46 +45,54 @@ open_article_commentstatus.short_description = _('Open article comments')
class ArticlelAdmin(admin.ModelAdmin):
- list_per_page = 20
- search_fields = ('body', 'title')
- form = ArticleForm
+ list_per_page = 20 # 管理员列表页每页显示20条记录
+ search_fields = ('body', 'title') # 可搜索的字段,按文章内容和标题搜索
+ form = ArticleForm # 使用自定义的ArticleForm作为表单
+ # 列表页显示的字段
list_display = (
'id',
'title',
'author',
- 'link_to_category',
+ 'link_to_category', # 自定义的显示分类链接的字段
'creation_time',
'views',
'status',
'type',
'article_order')
- list_display_links = ('id', 'title')
- list_filter = ('status', 'type', 'category')
- filter_horizontal = ('tags',)
- exclude = ('creation_time', 'last_modify_time')
- view_on_site = True
+ list_display_links = ('id', 'title') # 列表页中可点击跳转详情的字段
+ list_filter = ('status', 'type', 'category') # 可用于筛选的字段
+ filter_horizontal = ('tags',) # 水平过滤选择的字段(用于多对多关系,如文章和标签)
+ exclude = ('creation_time', 'last_modify_time') # 编辑页排除的字段(不显示这两个时间字段)
+ view_on_site = True # 开启在站点查看文章的功能
actions = [
+ # 配置admin界面的动作选项,即上面定义的几个动作函数
makr_article_publish,
draft_article,
close_article_commentstatus,
open_article_commentstatus]
+ # 自定义显示分类为可点击链接的方法
def link_to_category(self, obj):
+ # 获取分类模型的app_label和model_name,用于生成admin后台分类编辑页面的链接
info = (obj.category._meta.app_label, obj.category._meta.model_name)
link = reverse('admin:%s_%s_change' % info, args=(obj.category.id,))
+ # 格式化生成带链接的分类名称
return format_html(u'%s' % (link, obj.category.name))
- link_to_category.short_description = _('category')
+ link_to_category.short_description = _('category') # 该自定义字段在列表页的显示名称
+ # 重写获取表单的方法,用于自定义作者字段的查询集
def get_form(self, request, obj=None, **kwargs):
form = super(ArticlelAdmin, self).get_form(request, obj, **kwargs)
- form.base_fields['author'].queryset = get_user_model(
- ).objects.filter(is_superuser=True)
+ # 作者字段只显示超级用户
+ form.base_fields['author'].queryset = get_user_model().objects.filter(is_superuser=True)
return form
+ # 重写保存模型的方法,可在这里添加自定义的保存逻辑,当前示例中调用父类方法进行默认保存
def save_model(self, request, obj, form, change):
super(ArticlelAdmin, self).save_model(request, obj, form, change)
+ # 重写获取站点查看链接的方法,返回文章在站点的完整URL
def get_view_on_site_url(self, obj=None):
if obj:
url = obj.get_full_url()
@@ -91,22 +104,22 @@ class ArticlelAdmin(admin.ModelAdmin):
class TagAdmin(admin.ModelAdmin):
- exclude = ('slug', 'last_mod_time', 'creation_time')
+ exclude = ('slug', 'last_mod_time', 'creation_time') # 标签编辑页排除的字段
class CategoryAdmin(admin.ModelAdmin):
- list_display = ('name', 'parent_category', 'index')
- exclude = ('slug', 'last_mod_time', 'creation_time')
+ list_display = ('name', 'parent_category', 'index') # 分类列表页显示的字段
+ exclude = ('slug', 'last_mod_time', 'creation_time') # 分类编辑页排除的字段
class LinksAdmin(admin.ModelAdmin):
- exclude = ('last_mod_time', 'creation_time')
+ exclude = ('last_mod_time', 'creation_time') # 链接编辑页排除的字段
class SideBarAdmin(admin.ModelAdmin):
- list_display = ('name', 'content', 'is_enable', 'sequence')
- exclude = ('last_mod_time', 'creation_time')
+ list_display = ('name', 'content', 'is_enable', 'sequence') # 侧边栏列表页显示的字段
+ exclude = ('last_mod_time', 'creation_time') # 侧边栏编辑页排除的字段
class BlogSettingsAdmin(admin.ModelAdmin):
- pass
+ pass # 博客设置的admin类,暂时没有额外配置
\ No newline at end of file
diff --git a/src/DjangoBlog/blog/templatetags/__pycache__/blog_tags.cpython-310.pyc b/src/DjangoBlog/blog/templatetags/__pycache__/blog_tags.cpython-310.pyc
index 8aac121..9f0505e 100644
Binary files a/src/DjangoBlog/blog/templatetags/__pycache__/blog_tags.cpython-310.pyc and b/src/DjangoBlog/blog/templatetags/__pycache__/blog_tags.cpython-310.pyc differ
diff --git a/src/DjangoBlog/blog/templatetags/blog_tags.py b/src/DjangoBlog/blog/templatetags/blog_tags.py
index d6cd5d5..145da6e 100644
--- a/src/DjangoBlog/blog/templatetags/blog_tags.py
+++ b/src/DjangoBlog/blog/templatetags/blog_tags.py
@@ -20,21 +20,26 @@ from djangoblog.utils import get_current_site
from oauth.models import OAuthUser
from djangoblog.plugin_manage import hooks
+# 获取当前模块的日志记录器
logger = logging.getLogger(__name__)
+# 注册模板标签库,用于在Django模板中使用自定义标签和过滤器
register = template.Library()
@register.simple_tag(takes_context=True)
def head_meta(context):
+ # 应用过滤器到'head_meta',并标记为安全的HTML内容返回
return mark_safe(hooks.apply_filters('head_meta', '', context))
@register.simple_tag
def timeformat(data):
try:
+ # 按照设置的时间格式格式化日期时间数据
return data.strftime(settings.TIME_FORMAT)
except Exception as e:
+ # 捕获异常并记录错误日志
logger.error(e)
return ""
@@ -42,6 +47,7 @@ def timeformat(data):
@register.simple_tag
def datetimeformat(data):
try:
+ # 按照设置的日期时间格式格式化数据
return data.strftime(settings.DATE_TIME_FORMAT)
except Exception as e:
logger.error(e)
@@ -51,12 +57,14 @@ def datetimeformat(data):
@register.filter()
@stringfilter
def custom_markdown(content):
+ # 将内容用自定义的Markdown解析器转换为HTML,并标记为安全
return mark_safe(CommonMarkdown.get_markdown(content))
@register.simple_tag
def get_markdown_toc(content):
from djangoblog.utils import CommonMarkdown
+ # 获取Markdown内容的目录
body, toc = CommonMarkdown.get_markdown_with_toc(content)
return mark_safe(toc)
@@ -64,6 +72,7 @@ def get_markdown_toc(content):
@register.filter()
@stringfilter
def comment_markdown(content):
+ # 先将评论内容用Markdown解析,再进行HTML清理,最后标记为安全
content = CommonMarkdown.get_markdown(content)
return mark_safe(sanitize_html(content))
@@ -78,7 +87,9 @@ def truncatechars_content(content):
"""
from django.template.defaultfilters import truncatechars_html
from djangoblog.utils import get_blog_setting
+ # 获取博客设置
blogsetting = get_blog_setting()
+ # 按照设置的文章摘要长度截断HTML内容
return truncatechars_html(content, blogsetting.article_sub_length)
@@ -86,7 +97,7 @@ def truncatechars_content(content):
@stringfilter
def truncate(content):
from django.utils.html import strip_tags
-
+ # 去除HTML标签后截断内容,取前150个字符
return strip_tags(content)[:150]
@@ -97,11 +108,14 @@ def load_breadcrumb(article):
:param article:
:return:
"""
+ # 获取文章的分类树
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]
return {
@@ -118,9 +132,11 @@ def load_articletags(article):
:param article:
:return:
"""
+ # 获取文章的所有标签
tags = article.tags.all()
tags_list = []
for tag in tags:
+ # 为每个标签生成URL、文章数量等信息,并随机选择一个引导类颜色
url = tag.get_absolute_url()
count = tag.get_article_count()
tags_list.append((
@@ -137,6 +153,7 @@ def load_sidebar(user, linktype):
加载侧边栏
:return:
"""
+ # 尝试从缓存获取侧边栏数据
value = cache.get("sidebar" + linktype)
if value:
value['user'] = user
@@ -145,16 +162,23 @@ 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()
+ # 获取启用的额外侧边栏
extra_sidebars = SideBar.objects.filter(
is_enable=True).order_by('sequence')
+ # 获取最多阅读的文章
most_read_articles = Article.objects.filter(status='p').order_by(
'-views')[:blogsetting.sidebar_article_count]
+ # 获取按月份归档的日期
dates = Article.objects.datetimes('creation_time', 'month', order='DESC')
+ # 获取符合显示类型的链接
links = Links.objects.filter(is_enable=True).filter(
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]
# 标签云 计算字体大小
@@ -185,6 +209,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
@@ -211,9 +236,11 @@ def load_pagination_info(page_obj, page_type, tag_name):
if page_type == '':
if page_obj.has_next():
next_number = page_obj.next_page_number()
+ # 生成下一页的URL
next_url = reverse('blog:index_page', kwargs={'page': next_number})
if page_obj.has_previous():
previous_number = page_obj.previous_page_number()
+ # 生成上一页的URL
previous_url = reverse(
'blog:index_page', kwargs={
'page': previous_number})
@@ -298,10 +325,12 @@ def load_article_detail(article, isindex, user):
def gravatar_url(email, size=40):
"""获得gravatar头像"""
cachekey = 'gravatat/' + email
+ # 尝试从缓存获取头像URL
url = cache.get(cachekey)
if url:
return url
else:
+ # 查找对应的OAuth用户
usermodels = OAuthUser.objects.filter(email=email)
if usermodels:
o = list(filter(lambda x: x.picture is not None, usermodels))
@@ -313,7 +342,8 @@ def gravatar_url(email, size=40):
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)
+ # 设置头像URL缓存,有效期10分钟
+ cache.set(cachekey, url, 60 * 10)
logger.info('set gravatar cache.key:{key}'.format(key=cachekey))
return url
@@ -321,6 +351,7 @@ def gravatar_url(email, size=40):
@register.filter
def gravatar(email, size=40):
"""获得gravatar头像"""
+ # 获取头像URL并生成img标签,标记为安全的HTML
url = gravatar_url(email, size)
return mark_safe(
'
' %
@@ -335,10 +366,12 @@ def query(qs, **kwargs):
...
{% endfor %}
"""
+ # 对查询集进行过滤
return qs.filter(**kwargs)
@register.filter
def addstr(arg1, arg2):
"""concatenate arg1 & arg2"""
- return str(arg1) + str(arg2)
+ # 连接两个字符串
+ return str(arg1) + str(arg2)
\ No newline at end of file
diff --git a/src/DjangoBlog/djangoblog/__pycache__/settings.cpython-310.pyc b/src/DjangoBlog/djangoblog/__pycache__/settings.cpython-310.pyc
index a05f150..1d4cf81 100644
Binary files a/src/DjangoBlog/djangoblog/__pycache__/settings.cpython-310.pyc and b/src/DjangoBlog/djangoblog/__pycache__/settings.cpython-310.pyc differ
diff --git a/src/DjangoBlog/djangoblog/settings.py b/src/DjangoBlog/djangoblog/settings.py
index 30f9ac5..43cef6d 100644
--- a/src/DjangoBlog/djangoblog/settings.py
+++ b/src/DjangoBlog/djangoblog/settings.py
@@ -1,13 +1,7 @@
"""
Django settings for djangoblog project.
-
+项目核心配置文件,包含数据库、中间件、应用、资源路径等关键运行参数
Generated by 'django-admin startproject' using Django 1.10.2.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/1.10/topics/settings/
-
-For the full list of settings and their values, see
-https://docs.djangoproject.com/en/1.10/ref/settings/
"""
import os
import sys
@@ -16,328 +10,233 @@ from pathlib import Path
from django.utils.translation import gettext_lazy as _
+# 环境变量转布尔值工具函数:处理配置中需要布尔类型的环境变量
def env_to_bool(env, default):
str_val = os.environ.get(env)
return default if str_val is None else str_val == 'True'
-# Build paths inside the project like this: BASE_DIR / 'subdir'.
+# 项目根目录:当前配置文件所在目录的父目录(即项目根路径)
BASE_DIR = Path(__file__).resolve().parent.parent
-# Quick-start development settings - unsuitable for production
-# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
-# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = os.environ.get(
- 'DJANGO_SECRET_KEY') or 'n9ceqv38)#&mwuat@(mjb_p%em$e8$qyr#fw9ot!=ba6lijx-6'
-# SECURITY WARNING: don't run with debug turned on in production!
+# -------------------------- 基础安全与运行配置 --------------------------
+# 密钥:生产环境需通过环境变量配置,默认值仅用于开发(避免硬编码泄露)
+SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') or 'n9ceqv38)#&mwuat@(mjb_p%em$e8$qyr#fw9ot!=ba6lijx-6'
+# 调试模式:开发环境True,生产环境必须False(通过环境变量控制)
DEBUG = env_to_bool('DJANGO_DEBUG', True)
-# DEBUG = False
+# 测试模式标识:执行python manage.py test时为True
TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test'
-# ALLOWED_HOSTS = []
+# 允许访问的主机:生产环境需指定具体域名,*为开发环境临时配置
ALLOWED_HOSTS = ['*', '127.0.0.1', 'example.com']
-# django 4.0新增配置
+# Django 4.0+ 新增:信任的CSRF来源,解决跨域CSRF验证问题
CSRF_TRUSTED_ORIGINS = ['http://example.com']
-# Application definition
+# -------------------------- 已安装应用 --------------------------
INSTALLED_APPS = [
- # 'django.contrib.admin',
- 'django.contrib.admin.apps.SimpleAdminConfig',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'django.contrib.sites',
- 'django.contrib.sitemaps',
- 'mdeditor',
- 'haystack',
- 'blog',
- 'accounts',
- 'comments',
- 'oauth',
- 'servermanager',
- 'owntracks',
- 'compressor',
- 'djangoblog'
+ 'django.contrib.admin.apps.SimpleAdminConfig', # 简化版Admin后台
+ 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions',
+ 'django.contrib.messages', 'django.contrib.staticfiles', # Django内置核心应用
+ 'django.contrib.sites', 'django.contrib.sitemaps', # 站点管理、站点地图
+ 'mdeditor', # Markdown编辑器(用于文章编辑)
+ 'haystack', # 全文搜索框架
+ 'blog', 'accounts', 'comments', 'oauth', 'servermanager', 'owntracks', # 项目业务应用
+ 'compressor', # 静态资源压缩工具
+ 'djangoblog' # 项目主应用
]
-MIDDLEWARE = [
- 'django.middleware.security.SecurityMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.locale.LocaleMiddleware',
- 'django.middleware.gzip.GZipMiddleware',
- # 'django.middleware.cache.UpdateCacheMiddleware',
- 'django.middleware.common.CommonMiddleware',
- # 'django.middleware.cache.FetchFromCacheMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- 'django.middleware.http.ConditionalGetMiddleware',
- 'blog.middleware.OnlineMiddleware'
+# -------------------------- 中间件配置 --------------------------
+MIDDLEWARE = [
+ 'django.middleware.security.SecurityMiddleware', # 安全相关中间件
+ 'django.contrib.sessions.middleware.SessionMiddleware', # 会话管理
+ 'django.middleware.locale.LocaleMiddleware', # 国际化支持
+ 'django.middleware.gzip.GZipMiddleware', # 响应GZip压缩
+ 'django.middleware.common.CommonMiddleware', # 通用中间件
+ 'django.middleware.csrf.CsrfViewMiddleware', # CSRF防护
+ 'django.contrib.auth.middleware.AuthenticationMiddleware', # 用户认证
+ 'django.contrib.messages.middleware.MessageMiddleware', # 消息提示
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware', # X-Frame-Options防护
+ 'django.middleware.http.ConditionalGetMiddleware', # 条件请求优化
+ 'blog.middleware.OnlineMiddleware' # 自定义:用户在线状态中间件
]
-ROOT_URLCONF = 'djangoblog.urls'
+
+# -------------------------- URL与模板配置 --------------------------
+ROOT_URLCONF = 'djangoblog.urls' # 主URL配置文件路径
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [os.path.join(BASE_DIR, 'templates')],
- 'APP_DIRS': True,
+ 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 全局模板目录
+ 'APP_DIRS': True, # 允许加载各应用内的templates目录
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
- 'blog.context_processors.seo_processor'
+ 'blog.context_processors.seo_processor' # 自定义:SEO相关上下文
],
},
},
]
-WSGI_APPLICATION = 'djangoblog.wsgi.application'
-
-# Database
-# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
+WSGI_APPLICATION = 'djangoblog.wsgi.application' # WSGI应用入口
+# -------------------------- 数据库配置 --------------------------
DATABASES = {
'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': os.environ.get('DJANGO_MYSQL_DATABASE') or 'djangoblog',
- 'USER': os.environ.get('DJANGO_MYSQL_USER') or 'root',
- 'PASSWORD': os.environ.get('DJANGO_MYSQL_PASSWORD') or '123456',
- 'HOST': os.environ.get('DJANGO_MYSQL_HOST') or '127.0.0.1',
- 'PORT': int(
- os.environ.get('DJANGO_MYSQL_PORT') or 3306),
- 'OPTIONS': {
- 'charset': 'utf8mb4'},
+ 'ENGINE': 'django.db.backends.mysql', # 使用MySQL数据库
+ 'NAME': os.environ.get('DJANGO_MYSQL_DATABASE') or 'djangoblog', # 数据库名
+ 'USER': os.environ.get('DJANGO_MYSQL_USER') or 'root', # 数据库用户名
+ 'PASSWORD': os.environ.get('DJANGO_MYSQL_PASSWORD') or '123456', # 密码
+ 'HOST': os.environ.get('DJANGO_MYSQL_HOST') or '127.0.0.1', # 数据库地址
+ 'PORT': int(os.environ.get('DJANGO_MYSQL_PORT') or 3306), # 端口
+ 'OPTIONS': {'charset': 'utf8mb4'}, # 支持emoji的字符集
}}
-# Password validation
-# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
-AUTH_PASSWORD_VALIDATORS = [
- {
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
- },
+# -------------------------- 密码验证与用户配置 --------------------------
+AUTH_PASSWORD_VALIDATORS = [ # Django内置密码强度验证规则
+ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
+ {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'},
+ {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
+ {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'},
]
-LANGUAGES = (
- ('en', _('English')),
- ('zh-hans', _('Simplified Chinese')),
- ('zh-hant', _('Traditional Chinese')),
-)
-LOCALE_PATHS = (
- os.path.join(BASE_DIR, 'locale'),
-)
+AUTH_USER_MODEL = 'accounts.BlogUser' # 自定义用户模型(替换默认User)
+LOGIN_URL = '/login/' # 用户登录跳转URL
-LANGUAGE_CODE = 'zh-hans'
-TIME_ZONE = 'Asia/Shanghai'
+# -------------------------- 国际化与时间配置 --------------------------
+LANGUAGES = (('en', _('English')), ('zh-hans', _('Simplified Chinese')), ('zh-hant', _('Traditional Chinese')))
+LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),) # 国际化翻译文件目录
+LANGUAGE_CODE = 'zh-hans' # 默认语言:简体中文
+TIME_ZONE = 'Asia/Shanghai' # 时区:上海
+USE_I18N = True # 启用国际化
+USE_L10N = True # 启用本地化
+USE_TZ = False # 不使用UTC时间(使用本地时间)
-USE_I18N = True
-USE_L10N = True
+# -------------------------- 静态资源与媒体文件 --------------------------
+STATIC_ROOT = os.path.join(BASE_DIR, 'collectedstatic') # 生产环境静态资源收集目录
+STATIC_URL = '/static/' # 静态资源访问URL前缀
+STATICFILES = os.path.join(BASE_DIR, 'static') # 开发环境静态资源目录
-USE_TZ = False
+MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads') # 上传文件存储目录
+MEDIA_URL = '/media/' # 上传文件访问URL前缀
-# Static files (CSS, JavaScript, Images)
-# https://docs.djangoproject.com/en/1.10/howto/static-files/
+# 静态资源压缩配置(compressor)
+STATICFILES_FINDERS = (
+ 'django.contrib.staticfiles.finders.FileSystemFinder',
+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+ 'compressor.finders.CompressorFinder',
+)
+COMPRESS_ENABLED = True # 启用压缩
+COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.CSSMinFilter']
+COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
+# -------------------------- 全文搜索(Haystack)配置 --------------------------
HAYSTACK_CONNECTIONS = {
'default': {
- 'ENGINE': 'djangoblog.whoosh_cn_backend.WhooshEngine',
- 'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
+ 'ENGINE': 'djangoblog.whoosh_cn_backend.WhooshEngine', # 中文Whoosh引擎
+ 'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'), # 索引存储路径
},
}
-# Automatically update searching index
-HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
-# Allow user login with username and password
-AUTHENTICATION_BACKENDS = [
- 'accounts.user_login_backend.EmailOrUsernameModelBackend']
-
-STATIC_ROOT = os.path.join(BASE_DIR, 'collectedstatic')
-
-STATIC_URL = '/static/'
-STATICFILES = os.path.join(BASE_DIR, 'static')
+HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' # 实时更新索引
-AUTH_USER_MODEL = 'accounts.BlogUser'
-LOGIN_URL = '/login/'
-
-TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
-DATE_TIME_FORMAT = '%Y-%m-%d'
+# 生产环境支持Elasticsearch(通过环境变量启用)
+if os.environ.get('DJANGO_ELASTICSEARCH_HOST'):
+ ELASTICSEARCH_DSL = {'default': {'hosts': os.environ.get('DJANGO_ELASTICSEARCH_HOST')}}
+ HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'djangoblog.elasticsearch_backend.ElasticSearchEngine'}}
-# bootstrap color styles
-BOOTSTRAP_COLOR_TYPES = [
- 'default', 'primary', 'success', 'info', 'warning', 'danger'
-]
-# paginate
-PAGINATE_BY = 10
-# http cache timeout
-CACHE_CONTROL_MAX_AGE = 2592000
-# cache setting
+# -------------------------- 缓存配置 --------------------------
CACHES = {
'default': {
- 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
- 'TIMEOUT': 10800,
+ 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', # 默认:内存缓存
+ 'TIMEOUT': 10800, # 缓存超时时间(秒)
'LOCATION': 'unique-snowflake',
}
}
-# 使用redis作为缓存
+# 生产环境支持Redis缓存(通过环境变量启用)
if os.environ.get("DJANGO_REDIS_URL"):
- CACHES = {
- 'default': {
- 'BACKEND': 'django.core.cache.backends.redis.RedisCache',
- 'LOCATION': f'redis://{os.environ.get("DJANGO_REDIS_URL")}',
- }
- }
+ CACHES = {'default': {'BACKEND': 'django.core.cache.backends.redis.RedisCache', 'LOCATION': f'redis://{os.environ.get("DJANGO_REDIS_URL")}'}}
-SITE_ID = 1
-BAIDU_NOTIFY_URL = os.environ.get('DJANGO_BAIDU_NOTIFY_URL') \
- or 'http://data.zz.baidu.com/urls?site=https://www.lylinux.net&token=1uAOGrMsUm5syDGn'
+CACHE_CONTROL_MAX_AGE = 2592000 # HTTP缓存最大有效期(秒)
-# Email:
-EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
-EMAIL_USE_TLS = env_to_bool('DJANGO_EMAIL_TLS', False)
-EMAIL_USE_SSL = env_to_bool('DJANGO_EMAIL_SSL', True)
-EMAIL_HOST = os.environ.get('DJANGO_EMAIL_HOST') or 'smtp.mxhichina.com'
-EMAIL_PORT = int(os.environ.get('DJANGO_EMAIL_PORT') or 465)
-EMAIL_HOST_USER = os.environ.get('DJANGO_EMAIL_USER')
-EMAIL_HOST_PASSWORD = os.environ.get('DJANGO_EMAIL_PASSWORD')
-DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
-SERVER_EMAIL = EMAIL_HOST_USER
-# Setting debug=false did NOT handle except email notifications
-ADMINS = [('admin', os.environ.get('DJANGO_ADMIN_EMAIL') or 'admin@admin.com')]
-# WX ADMIN password(Two times md5)
-WXADMIN = os.environ.get(
- 'DJANGO_WXADMIN_PASSWORD') or '995F03AC401D6CABABAEF756FC4D43C7'
-LOG_PATH = os.path.join(BASE_DIR, 'logs')
+# -------------------------- 日志配置 --------------------------
+LOG_PATH = os.path.join(BASE_DIR, 'logs') # 日志存储目录
if not os.path.exists(LOG_PATH):
os.makedirs(LOG_PATH, exist_ok=True)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
- 'root': {
- 'level': 'INFO',
- 'handlers': ['console', 'log_file'],
- },
- 'formatters': {
- 'verbose': {
- 'format': '[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d %(module)s] %(message)s',
- }
- },
- 'filters': {
- 'require_debug_false': {
- '()': 'django.utils.log.RequireDebugFalse',
- },
- 'require_debug_true': {
- '()': 'django.utils.log.RequireDebugTrue',
- },
- },
+ 'root': {'level': 'INFO', 'handlers': ['console', 'log_file']},
+ 'formatters': {'verbose': {'format': '[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d %(module)s] %(message)s'}},
+ 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}, 'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue'}},
'handlers': {
- 'log_file': {
- 'level': 'INFO',
- 'class': 'logging.handlers.TimedRotatingFileHandler',
- 'filename': os.path.join(LOG_PATH, 'djangoblog.log'),
- 'when': 'D',
- 'formatter': 'verbose',
- 'interval': 1,
- 'delay': True,
- 'backupCount': 5,
- 'encoding': 'utf-8'
- },
- 'console': {
- 'level': 'DEBUG',
- 'filters': ['require_debug_true'],
- 'class': 'logging.StreamHandler',
- 'formatter': 'verbose'
- },
- 'null': {
- 'class': 'logging.NullHandler',
- },
- 'mail_admins': {
- 'level': 'ERROR',
- 'filters': ['require_debug_false'],
- 'class': 'django.utils.log.AdminEmailHandler'
- }
+ 'log_file': {'level': 'INFO', 'class': 'logging.handlers.TimedRotatingFileHandler', 'filename': os.path.join(LOG_PATH, 'djangoblog.log'), 'when': 'D', 'formatter': 'verbose', 'interval': 1, 'delay': True, 'backupCount': 5, 'encoding': 'utf-8'},
+ 'console': {'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'verbose'},
+ 'null': {'class': 'logging.NullHandler'},
+ 'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}
},
'loggers': {
- 'djangoblog': {
- 'handlers': ['log_file', 'console'],
- 'level': 'INFO',
- 'propagate': True,
- },
- 'django.request': {
- 'handlers': ['mail_admins'],
- 'level': 'ERROR',
- 'propagate': False,
- }
+ 'djangoblog': {'handlers': ['log_file', 'console'], 'level': 'INFO', 'propagate': True},
+ 'django.request': {'handlers': ['mail_admins'], 'level': 'ERROR', 'propagate': False}
}
}
-STATICFILES_FINDERS = (
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
- # other
- 'compressor.finders.CompressorFinder',
-)
-COMPRESS_ENABLED = True
-# COMPRESS_OFFLINE = True
+# -------------------------- 项目业务配置 --------------------------
+SITE_ID = 1 # 站点ID(用于sitemap等功能)
+BAIDU_NOTIFY_URL = os.environ.get('DJANGO_BAIDU_NOTIFY_URL') or 'http://data.zz.baidu.com/urls?site=https://www.lylinux.net&token=1uAOGrMsUm5syDGn' # 百度收录通知URL
-COMPRESS_CSS_FILTERS = [
- # creates absolute urls from relative ones
- 'compressor.filters.css_default.CssAbsoluteFilter',
- # css minimizer
- 'compressor.filters.cssmin.CSSMinFilter'
-]
-COMPRESS_JS_FILTERS = [
- 'compressor.filters.jsmin.JSMinFilter'
-]
+# 时间格式定义
+TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
+DATE_TIME_FORMAT = '%Y-%m-%d'
-MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
-MEDIA_URL = '/media/'
+# Bootstrap样式类型(用于标签、按钮等样式随机选择)
+BOOTSTRAP_COLOR_TYPES = ['default', 'primary', 'success', 'info', 'warning', 'danger']
+
+# 分页配置:每页显示10条
+PAGINATE_BY = 10
+
+# 邮件配置(用于管理员通知、用户验证等)
+EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+EMAIL_USE_TLS = env_to_bool('DJANGO_EMAIL_TLS', False)
+EMAIL_USE_SSL = env_to_bool('DJANGO_EMAIL_SSL', True)
+EMAIL_HOST = os.environ.get('DJANGO_EMAIL_HOST') or 'smtp.mxhichina.com'
+EMAIL_PORT = int(os.environ.get('DJANGO_EMAIL_PORT') or 465)
+EMAIL_HOST_USER = os.environ.get('DJANGO_EMAIL_USER')
+EMAIL_HOST_PASSWORD = os.environ.get('DJANGO_EMAIL_PASSWORD')
+DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
+SERVER_EMAIL = EMAIL_HOST_USER
+ADMINS = [('admin', os.environ.get('DJANGO_ADMIN_EMAIL') or 'admin@admin.com')] # 管理员邮箱(接收错误通知)
+
+# 微信管理员密码(二次MD5加密)
+WXADMIN = os.environ.get('DJANGO_WXADMIN_PASSWORD') or '995F03AC401D6CABABAEF756FC4D43C7'
+
+# X-Frame-Options配置:允许同源页面嵌入iframe
X_FRAME_OPTIONS = 'SAMEORIGIN'
+# 默认自增字段类型(Django 3.2+ 推荐)
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
-if os.environ.get('DJANGO_ELASTICSEARCH_HOST'):
- ELASTICSEARCH_DSL = {
- 'default': {
- 'hosts': os.environ.get('DJANGO_ELASTICSEARCH_HOST')
- },
- }
- HAYSTACK_CONNECTIONS = {
- 'default': {
- 'ENGINE': 'djangoblog.elasticsearch_backend.ElasticSearchEngine',
- },
- }
-# Plugin System
-PLUGINS_DIR = BASE_DIR / 'plugins'
-ACTIVE_PLUGINS = [
- 'article_copyright',
- 'reading_time',
- 'external_links',
- 'view_count',
- 'seo_optimizer'
+# -------------------------- 插件系统配置 --------------------------
+PLUGINS_DIR = BASE_DIR / 'plugins' # 插件目录
+ACTIVE_PLUGINS = [ # 启用的插件列表
+ 'article_copyright', # 文章版权信息
+ 'reading_time', # 文章阅读时长
+ 'external_links', # 外部链接处理
+ 'view_count', # 文章阅读量统计
+ 'seo_optimizer' # SEO优化
]
\ No newline at end of file
diff --git a/src/DjangoBlog/logs/djangoblog.log b/src/DjangoBlog/logs/djangoblog.log
index b6e1d91..efe0d9b 100644
--- a/src/DjangoBlog/logs/djangoblog.log
+++ b/src/DjangoBlog/logs/djangoblog.log
@@ -1,378 +1,221 @@
-[2025-10-09 20:20:40,552] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:20:40,552] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:20:40,556] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:20:40,556] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:20:40,563] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:20:40,563] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:20:40,564] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:20:40,564] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:20:40,569] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:20:40,569] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:20:40,570] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:20:40,570] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:20:44,018] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:20:44,018] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:20:44,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:20:44,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:20:44,024] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:20:44,024] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:20:44,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:20:44,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:20:44,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:20:44,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:20:44,028] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:20:44,028] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:20:44,086] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
-[2025-10-09 20:20:49,912] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
-[2025-10-09 20:20:50,270] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:20:50,389] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:20:50,389] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:20:53,612] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:20:54,150] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
-[2025-10-09 20:20:59,864] INFO [blog.models.comment_list:151 models] set article comments:19
-[2025-10-09 20:21:00,356] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:21:00,411] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
-[2025-10-09 20:21:00,566] INFO [blog.models.comment_list:151 models] set article comments:19
-[2025-10-09 20:21:00,811] INFO [blog.models.comment_list:151 models] set article comments:19
-[2025-10-09 20:21:00,976] INFO [blog.models.comment_list:151 models] set article comments:19
-[2025-10-09 20:23:43,991] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:23:43,991] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:23:43,992] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:23:43,992] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:23:43,999] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:23:43,999] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:23:44,002] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:23:44,002] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:24:18,506] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:24:18,506] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:24:18,507] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:24:18,507] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:24:18,524] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:24:18,524] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:24:18,525] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:24:18,525] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:24:18,531] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:24:18,531] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:24:18,540] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:24:18,540] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:24:28,813] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:24:28,813] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:24:28,814] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:24:28,814] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:24:28,817] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:24:28,817] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:24:28,818] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:24:28,818] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:24:28,821] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:24:28,821] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:24:28,822] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:24:28,822] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:24:56,786] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:24:56,786] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:24:56,789] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:24:56,789] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:24:56,794] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:24:56,794] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:24:56,795] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:24:56,795] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:24:56,799] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:24:56,799] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:24:56,800] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:24:56,800] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:25:31,303] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:25:31,303] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:25:33,319] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:25:33,319] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:25:33,320] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:25:33,320] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:25:33,324] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:25:33,324] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:25:33,325] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:25:33,325] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:25:33,328] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:25:33,328] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:25:33,329] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:25:33,329] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:25:33,332] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:25:33,332] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:25:33,334] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:25:33,334] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:25:37,953] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:25:37,953] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:25:37,954] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:25:37,954] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:25:37,959] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:25:37,959] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:25:37,960] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:25:37,960] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:25:37,962] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:25:37,962] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:25:37,963] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:25:37,963] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:26:20,044] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:26:20,044] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:26:20,045] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:26:20,045] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:26:20,047] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:26:20,047] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:26:20,048] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:26:20,048] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:26:20,050] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:26:20,050] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:26:20,051] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:26:20,051] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:26:20,053] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:26:20,053] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:26:20,054] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:26:20,054] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:26:21,901] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:26:21,901] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
-[2025-10-09 20:26:21,902] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:26:21,902] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
-[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
-[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
-[2025-10-09 20:26:21,907] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:26:21,907] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
-[2025-10-09 20:26:21,908] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:26:21,908] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
-[2025-10-09 20:26:21,910] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:26:21,910] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
-[2025-10-09 20:26:21,911] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:26:21,911] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
-[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
-[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
-[2025-10-09 20:26:21,958] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
-[2025-10-09 20:26:26,711] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
-[2025-10-09 20:26:26,731] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:26:26,745] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:26:26,745] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:26:27,351] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:26:27,451] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
-[2025-10-09 20:26:45,038] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:26:45,038] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:26:45,043] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] 123@example.com
-[2025-10-09 20:26:45,043] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] 123@example.com
-[2025-10-09 20:26:45,044] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
-[2025-10-09 20:26:45,044] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
-[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
-[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
-[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
-[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
-[2025-10-09 20:26:45,046] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
-[2025-10-09 20:26:45,046] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
-[2025-10-09 20:26:45,055] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
-[2025-10-09 20:26:45,055] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
-[2025-10-09 20:26:45,135] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:26:45,143] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:26:45,143] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:29:04,998] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_我是父类目_1
-[2025-10-09 20:29:05,280] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:29:05,354] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
-[2025-10-09 20:29:06,310] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_子类目_1
-[2025-10-09 20:29:08,369] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:archives
-[2025-10-09 20:29:08,396] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:29:08,421] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
-[2025-10-09 20:29:12,319] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
-[2025-10-09 20:34:02,809] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/dian-shi-ju.html"]}
-[2025-10-09 20:34:02,809] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/dian-shi-ju.html"]}
-[2025-10-09 20:34:02,862] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:34:02,870] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:34:02,870] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:34:13,326] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
-[2025-10-09 20:34:13,619] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:34:13,698] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
-[2025-10-09 20:34:18,199] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_电视剧_1
-[2025-10-09 20:34:18,461] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:34:18,482] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
-[2025-10-09 20:34:19,716] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_子类目_1
-[2025-10-09 20:34:21,259] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_电视剧_1
-[2025-10-09 20:34:22,317] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_子类目_1
-[2025-10-09 20:41:58,465] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
-[2025-10-09 20:41:58,465] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
-[2025-10-09 20:41:58,514] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:41:58,521] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:41:58,521] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:44:09,233] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:44:09,233] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:44:09,327] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:44:09,343] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:44:09,343] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:44:17,017] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:44:17,017] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
-[2025-10-09 20:44:17,148] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:44:17,157] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:44:17,157] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:44:53,675] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
-[2025-10-09 20:44:53,675] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
-[2025-10-09 20:44:54,091] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
-[2025-10-09 20:44:54,091] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
-[2025-10-09 20:44:54,156] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:44:54,165] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:44:54,165] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:46:20,663] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
-[2025-10-09 20:46:20,938] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:46:21,021] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
-[2025-10-09 20:46:24,716] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 20:46:29,907] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_1
-[2025-10-09 20:46:30,159] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:46:30,182] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
-[2025-10-09 20:46:37,264] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_2
-[2025-10-09 20:46:44,026] INFO [blog.models.comment_list:151 models] set article comments:1
-[2025-10-09 20:46:44,152] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:46:44,175] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
-[2025-10-09 20:47:00,090] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:tag_标签_1
-[2025-10-09 20:47:24,617] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/jiao-xue.html"]}
-[2025-10-09 20:47:24,617] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/jiao-xue.html"]}
-[2025-10-09 20:47:24,665] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:47:24,671] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:47:24,671] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:48:01,610] INFO [blog.models.comment_list:151 models] set article comments:1
-[2025-10-09 20:48:01,734] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:48:01,812] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
-[2025-10-09 20:49:15,005] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ren-gong-zhi-neng.html"]}
-[2025-10-09 20:49:15,005] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ren-gong-zhi-neng.html"]}
-[2025-10-09 20:49:15,051] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:49:15,058] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:49:15,058] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:49:36,899] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
-[2025-10-09 20:49:36,899] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
-[2025-10-09 20:49:36,943] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 20:49:36,950] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:49:36,950] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 20:49:40,845] INFO [blog.models.comment_list:151 models] set article comments:1
-[2025-10-09 20:49:40,987] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:49:41,064] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
-[2025-10-09 20:49:46,143] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_1
-[2025-10-09 20:49:46,213] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:49:46,235] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
-[2025-10-09 20:49:47,517] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_人工智能_1
-[2025-10-09 20:49:48,979] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
-[2025-10-09 20:49:49,047] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 20:49:49,067] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
-[2025-10-09 20:50:19,451] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 20:50:30,234] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 20:50:52,569] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 22:48:15,547] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_计算机_1
-[2025-10-09 22:48:16,485] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 22:51:24,558] INFO [blog.models.comment_list:151 models] set article comments:1
-[2025-10-09 23:01:50,681] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 23:04:53,595] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_计算机_1
-[2025-10-09 23:04:55,850] INFO [blog.models.comment_list:151 models] set article comments:1
-[2025-10-09 23:06:36,040] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/xue-xi.html"]}
-[2025-10-09 23:06:36,040] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/xue-xi.html"]}
-[2025-10-09 23:06:36,070] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 23:06:36,076] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 23:06:36,076] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 23:07:56,321] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/9/20.html"]}
-[2025-10-09 23:07:56,321] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/9/20.html"]}
-[2025-10-09 23:07:56,361] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
-[2025-10-09 23:07:56,367] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 23:07:56,367] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
-[2025-10-09 23:08:05,846] INFO [blog.models.comment_list:151 models] set article comments:1
-[2025-10-09 23:08:05,951] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 23:08:05,969] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
-[2025-10-09 23:08:08,490] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
-[2025-10-09 23:08:08,542] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 23:08:08,554] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
-[2025-10-09 23:08:10,568] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 23:08:16,684] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_1
-[2025-10-09 23:08:16,749] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
-[2025-10-09 23:08:16,765] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
-[2025-10-09 23:08:22,894] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_计算机_1
-[2025-10-09 23:08:25,921] INFO [blog.models.comment_list:151 models] set article comments:1
-[2025-10-09 23:13:52,973] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 23:20:53,174] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 23:21:02,934] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
-[2025-10-09 23:21:04,786] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-12 19:28:40,696] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:28:40,696] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:28:40,696] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:28:40,696] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:28:40,699] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:28:40,699] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:28:40,699] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:28:40,699] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:28:40,702] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:28:40,702] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:28:40,702] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:28:40,702] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:28:40,704] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:28:40,704] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:28:40,704] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:28:40,704] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:28:40,708] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:28:40,708] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:28:40,708] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:28:40,708] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:28:41,604] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:28:41,604] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:28:41,605] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:28:41,605] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:28:41,606] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:28:41,606] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:28:41,606] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:28:41,606] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:28:41,608] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:28:41,608] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:28:41,608] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:28:41,608] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:28:41,609] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:28:41,609] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:28:41,610] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:28:41,610] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:28:41,611] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:28:41,611] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:28:41,612] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:28:41,612] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:28:41,639] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
+[2025-10-12 19:28:46,951] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-12 19:28:46,966] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-12 19:28:46,983] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-12 19:28:46,983] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-12 19:28:47,720] INFO [blog.templatetags.blog_tags.load_sidebar:162 blog_tags] load sidebar
+[2025-10-12 19:28:47,783] INFO [blog.templatetags.blog_tags.load_sidebar:214 blog_tags] set sidebar cache.key:sidebari
+[2025-10-12 19:30:46,157] INFO [django.utils.autoreload.trigger_reload:265 autoreload] D:\software_project\src\DjangoBlog\servermanager\api\blogapi.py changed, reloading.
+[2025-10-12 19:30:47,195] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:30:47,195] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:30:47,196] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:30:47,196] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:30:47,197] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:30:47,197] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:30:47,198] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:30:47,198] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:30:47,199] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:30:47,199] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:30:47,200] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:30:47,200] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:30:47,201] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:30:47,201] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:30:47,201] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:30:47,201] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:30:47,203] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:30:47,203] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:30:47,203] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:30:47,203] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:30:47,234] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
+[2025-10-12 19:41:06,263] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:06,263] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:06,264] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:06,264] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:06,265] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:06,265] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:06,265] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:06,265] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:06,266] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:06,266] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:06,266] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:06,266] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:06,267] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:06,267] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:06,267] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:06,267] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:06,268] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:06,268] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:06,268] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:06,268] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:15,956] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:15,956] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:15,956] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:15,956] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:15,957] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:15,957] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:15,957] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:15,957] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:15,958] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:15,958] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:15,958] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:15,958] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:15,959] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:15,959] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:15,959] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:15,959] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:15,960] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:15,960] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:15,960] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:15,960] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:29,188] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:29,188] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:29,188] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:29,188] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:29,190] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:29,190] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:29,190] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:29,190] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:29,191] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:29,191] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:29,191] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:29,191] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:29,192] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:29,192] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:29,192] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:29,192] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:29,193] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:29,193] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:29,193] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:29,193] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:30,115] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:30,115] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:30,115] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:30,115] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:30,116] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:30,116] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:30,116] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:30,116] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:30,117] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:30,117] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:30,117] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:30,117] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:30,118] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:30,118] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:30,119] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:30,119] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:30,120] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:30,120] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:30,120] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:30,120] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:30,144] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
+[2025-10-12 19:41:33,755] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-12 19:38:05,975] INFO [django.utils.autoreload.trigger_reload:265 autoreload] D:\software_project\src\DjangoBlog\djangoblog\settings.py changed, reloading.
+[2025-10-12 19:41:51,725] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:51,725] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:41:51,725] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:51,725] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:41:51,726] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:51,726] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:41:51,727] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:51,727] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:41:51,728] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:51,728] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:41:51,728] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:51,728] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:41:51,729] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:51,729] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:41:51,729] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:51,729] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:41:51,731] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:51,731] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:41:51,732] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:51,732] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:41:51,756] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
+[2025-10-12 19:42:05,845] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:42:05,845] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:42:05,846] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:42:05,846] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:42:05,847] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:42:05,847] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:42:05,847] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:42:05,847] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:42:05,848] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:42:05,848] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:42:05,849] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:42:05,849] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:42:05,850] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:42:05,850] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:42:05,850] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:42:05,850] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:42:05,851] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:42:05,851] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:42:05,851] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:42:05,851] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:42:06,754] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:42:06,754] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-12 19:42:06,754] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:42:06,754] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-12 19:42:06,755] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:42:06,755] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-12 19:42:06,755] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:42:06,755] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-12 19:42:06,757] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:42:06,757] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-12 19:42:06,758] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:42:06,758] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-12 19:42:06,759] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:42:06,759] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-12 19:42:06,772] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:42:06,772] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-12 19:42:06,775] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:42:06,775] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-12 19:42:06,775] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:42:06,775] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-12 19:42:06,808] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
+[2025-10-12 19:42:37,150] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-12 19:42:37,158] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-12 19:42:37,164] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-12 19:42:37,164] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-12 19:42:37,461] INFO [blog.templatetags.blog_tags.load_sidebar:162 blog_tags] load sidebar
+[2025-10-12 19:42:37,480] INFO [blog.templatetags.blog_tags.load_sidebar:214 blog_tags] set sidebar cache.key:sidebari
+[2025-10-12 19:42:39,464] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
diff --git a/src/DjangoBlog/logs/djangoblog.log.2025-10-09 b/src/DjangoBlog/logs/djangoblog.log.2025-10-09
new file mode 100644
index 0000000..b6e1d91
--- /dev/null
+++ b/src/DjangoBlog/logs/djangoblog.log.2025-10-09
@@ -0,0 +1,378 @@
+[2025-10-09 20:20:40,552] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:20:40,552] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:20:40,556] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:20:40,556] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:20:40,563] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:20:40,563] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:20:40,564] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:20:40,564] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:20:40,569] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:20:40,569] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:20:40,570] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:20:40,570] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:20:40,576] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:20:40,582] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:20:44,018] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:20:44,018] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:20:44,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:20:44,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:20:44,022] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:20:44,024] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:20:44,024] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:20:44,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:20:44,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:20:44,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:20:44,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:20:44,028] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:20:44,028] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:20:44,031] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:20:44,086] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
+[2025-10-09 20:20:49,912] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-09 20:20:50,270] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:20:50,389] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:20:50,389] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:20:53,612] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:20:54,150] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
+[2025-10-09 20:20:59,864] INFO [blog.models.comment_list:151 models] set article comments:19
+[2025-10-09 20:21:00,356] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:21:00,411] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
+[2025-10-09 20:21:00,566] INFO [blog.models.comment_list:151 models] set article comments:19
+[2025-10-09 20:21:00,811] INFO [blog.models.comment_list:151 models] set article comments:19
+[2025-10-09 20:21:00,976] INFO [blog.models.comment_list:151 models] set article comments:19
+[2025-10-09 20:23:43,991] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:23:43,991] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:23:43,992] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:23:43,992] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:23:43,993] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:23:43,994] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:23:43,997] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:23:43,999] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:23:43,999] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:23:44,002] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:23:44,002] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:23:59,019] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:23:59,021] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:23:59,023] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:23:59,025] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:23:59,027] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:24:18,503] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:24:18,506] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:24:18,506] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:24:18,507] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:24:18,507] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:24:18,524] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:24:18,524] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:24:18,525] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:24:18,525] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:24:18,529] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:24:18,531] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:24:18,531] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:24:18,540] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:24:18,540] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:24:28,813] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:24:28,813] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:24:28,814] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:24:28,814] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:24:28,816] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:24:28,817] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:24:28,817] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:24:28,818] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:24:28,818] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:24:28,819] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:24:28,821] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:24:28,821] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:24:28,822] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:24:28,822] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:24:56,786] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:24:56,786] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:24:56,789] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:24:56,789] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:24:56,792] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:24:56,794] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:24:56,794] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:24:56,795] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:24:56,795] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:24:56,797] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:24:56,799] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:24:56,799] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:24:56,800] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:24:56,800] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:25:31,303] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:25:31,303] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:25:33,319] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:25:33,319] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:25:33,320] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:25:33,320] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:25:33,322] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:25:33,324] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:25:33,324] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:25:33,325] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:25:33,325] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:25:33,328] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:25:33,328] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:25:33,329] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:25:33,329] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:25:33,332] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:25:33,332] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:25:33,334] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:25:33,334] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:25:37,953] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:25:37,953] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:25:37,954] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:25:37,954] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:25:37,957] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:25:37,959] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:25:37,959] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:25:37,960] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:25:37,960] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:25:37,962] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:25:37,962] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:25:37,963] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:25:37,963] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:25:37,965] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:26:20,044] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:26:20,044] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:26:20,045] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:26:20,045] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:26:20,047] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:26:20,047] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:26:20,048] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:26:20,048] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:26:20,050] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:26:20,050] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:26:20,051] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:26:20,051] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:26:20,053] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:26:20,053] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:26:20,054] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:26:20,054] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:26:20,056] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:26:21,901] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:26:21,901] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章结尾版权声明 initialized.
+[2025-10-09 20:26:21,902] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:26:21,902] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: article_copyright
+[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 阅读时间预测 initialized.
+[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:26:21,904] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: reading_time
+[2025-10-09 20:26:21,907] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:26:21,907] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 外部链接处理器 initialized.
+[2025-10-09 20:26:21,908] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:26:21,908] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: external_links
+[2025-10-09 20:26:21,910] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:26:21,910] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] 文章浏览次数统计 initialized.
+[2025-10-09 20:26:21,911] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:26:21,911] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: view_count
+[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:23 base_plugin] SEO 优化器 initialized.
+[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:26:21,913] INFO [djangoblog.plugin_manage.loader.load_plugins:17 loader] Successfully loaded plugin: seo_optimizer
+[2025-10-09 20:26:21,958] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader
+[2025-10-09 20:26:26,711] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-09 20:26:26,731] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:26:26,745] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:26:26,745] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:26:27,351] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:26:27,451] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
+[2025-10-09 20:26:45,038] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:26:45,038] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:26:45,043] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] 123@example.com
+[2025-10-09 20:26:45,043] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] 123@example.com
+[2025-10-09 20:26:45,044] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
+[2025-10-09 20:26:45,044] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
+[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
+[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
+[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
+[2025-10-09 20:26:45,045] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
+[2025-10-09 20:26:45,046] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
+[2025-10-09 20:26:45,046] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
+[2025-10-09 20:26:45,055] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
+[2025-10-09 20:26:45,055] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
+[2025-10-09 20:26:45,135] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:26:45,143] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:26:45,143] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:29:04,998] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_我是父类目_1
+[2025-10-09 20:29:05,280] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:29:05,354] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
+[2025-10-09 20:29:06,310] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_子类目_1
+[2025-10-09 20:29:08,369] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:archives
+[2025-10-09 20:29:08,396] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:29:08,421] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
+[2025-10-09 20:29:12,319] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-09 20:34:02,809] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/dian-shi-ju.html"]}
+[2025-10-09 20:34:02,809] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/dian-shi-ju.html"]}
+[2025-10-09 20:34:02,862] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:34:02,870] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:34:02,870] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:34:13,326] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-09 20:34:13,619] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:34:13,698] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
+[2025-10-09 20:34:18,199] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_电视剧_1
+[2025-10-09 20:34:18,461] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:34:18,482] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
+[2025-10-09 20:34:19,716] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_子类目_1
+[2025-10-09 20:34:21,259] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_电视剧_1
+[2025-10-09 20:34:22,317] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_子类目_1
+[2025-10-09 20:41:58,465] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
+[2025-10-09 20:41:58,465] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
+[2025-10-09 20:41:58,514] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:41:58,521] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:41:58,521] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:44:09,233] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:44:09,233] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:44:09,327] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:44:09,343] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:44:09,343] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:44:17,017] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:44:17,017] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/lxl.html"]}
+[2025-10-09 20:44:17,148] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:44:17,157] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:44:17,157] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:44:53,675] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
+[2025-10-09 20:44:53,675] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
+[2025-10-09 20:44:54,091] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
+[2025-10-09 20:44:54,091] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/9/16/1.html"]}
+[2025-10-09 20:44:54,156] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:44:54,165] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:44:54,165] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:46:20,663] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-09 20:46:20,938] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:46:21,021] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
+[2025-10-09 20:46:24,716] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 20:46:29,907] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_1
+[2025-10-09 20:46:30,159] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:46:30,182] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
+[2025-10-09 20:46:37,264] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_2
+[2025-10-09 20:46:44,026] INFO [blog.models.comment_list:151 models] set article comments:1
+[2025-10-09 20:46:44,152] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:46:44,175] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
+[2025-10-09 20:47:00,090] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:tag_标签_1
+[2025-10-09 20:47:24,617] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/jiao-xue.html"]}
+[2025-10-09 20:47:24,617] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/jiao-xue.html"]}
+[2025-10-09 20:47:24,665] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:47:24,671] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:47:24,671] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:48:01,610] INFO [blog.models.comment_list:151 models] set article comments:1
+[2025-10-09 20:48:01,734] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:48:01,812] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
+[2025-10-09 20:49:15,005] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ren-gong-zhi-neng.html"]}
+[2025-10-09 20:49:15,005] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ren-gong-zhi-neng.html"]}
+[2025-10-09 20:49:15,051] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:49:15,058] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:49:15,058] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:49:36,899] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
+[2025-10-09 20:49:36,899] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/category/ji-suan-ji.html"]}
+[2025-10-09 20:49:36,943] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 20:49:36,950] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:49:36,950] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 20:49:40,845] INFO [blog.models.comment_list:151 models] set article comments:1
+[2025-10-09 20:49:40,987] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:49:41,064] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
+[2025-10-09 20:49:46,143] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_1
+[2025-10-09 20:49:46,213] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:49:46,235] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
+[2025-10-09 20:49:47,517] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_人工智能_1
+[2025-10-09 20:49:48,979] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-09 20:49:49,047] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 20:49:49,067] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
+[2025-10-09 20:50:19,451] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 20:50:30,234] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 20:50:52,569] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 22:48:15,547] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_计算机_1
+[2025-10-09 22:48:16,485] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 22:51:24,558] INFO [blog.models.comment_list:151 models] set article comments:1
+[2025-10-09 23:01:50,681] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 23:04:53,595] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_计算机_1
+[2025-10-09 23:04:55,850] INFO [blog.models.comment_list:151 models] set article comments:1
+[2025-10-09 23:06:36,040] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/xue-xi.html"]}
+[2025-10-09 23:06:36,040] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/tag/xue-xi.html"]}
+[2025-10-09 23:06:36,070] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 23:06:36,076] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 23:06:36,076] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 23:07:56,321] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/9/20.html"]}
+[2025-10-09 23:07:56,321] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/9/20.html"]}
+[2025-10-09 23:07:56,361] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
+[2025-10-09 23:07:56,367] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 23:07:56,367] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
+[2025-10-09 23:08:05,846] INFO [blog.models.comment_list:151 models] set article comments:1
+[2025-10-09 23:08:05,951] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 23:08:05,969] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarp
+[2025-10-09 23:08:08,490] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
+[2025-10-09 23:08:08,542] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 23:08:08,554] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebari
+[2025-10-09 23:08:10,568] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 23:08:16,684] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_计算机_1
+[2025-10-09 23:08:16,749] INFO [blog.templatetags.blog_tags.load_sidebar:145 blog_tags] load sidebar
+[2025-10-09 23:08:16,765] INFO [blog.templatetags.blog_tags.load_sidebar:189 blog_tags] set sidebar cache.key:sidebarl
+[2025-10-09 23:08:22,894] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:category_list_计算机_1
+[2025-10-09 23:08:25,921] INFO [blog.models.comment_list:151 models] set article comments:1
+[2025-10-09 23:13:52,973] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 23:20:53,174] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 23:21:02,934] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
+[2025-10-09 23:21:04,786] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
diff --git a/src/DjangoBlog/servermanager/api/__pycache__/blogapi.cpython-310.pyc b/src/DjangoBlog/servermanager/api/__pycache__/blogapi.cpython-310.pyc
index 9655728..5b664cb 100644
Binary files a/src/DjangoBlog/servermanager/api/__pycache__/blogapi.cpython-310.pyc and b/src/DjangoBlog/servermanager/api/__pycache__/blogapi.cpython-310.pyc differ
diff --git a/src/DjangoBlog/servermanager/api/blogapi.py b/src/DjangoBlog/servermanager/api/blogapi.py
index 8a4d6ac..1807f2b 100644
--- a/src/DjangoBlog/servermanager/api/blogapi.py
+++ b/src/DjangoBlog/servermanager/api/blogapi.py
@@ -1,27 +1,51 @@
+# 导入Django-Haystack的搜索查询集类,用于实现全文搜索功能
from haystack.query import SearchQuerySet
-
+# 导入博客应用的核心数据模型:文章模型(Article)和分类模型(Category)
from blog.models import Article, Category
class BlogApi:
+ """
+ 博客系统数据接口封装类
+ 统一提供文章搜索、分类查询、分类文章筛选、最新文章获取等核心数据操作
+ """
def __init__(self):
+ # 初始化搜索查询集,用于后续全文搜索
self.searchqueryset = SearchQuerySet()
+ # 执行空查询初始化搜索状态,避免首次搜索异常
self.searchqueryset.auto_query('')
+ # 定义每次查询的最大返回数量(8条),控制数据返回规模
self.__max_takecount__ = 8
def search_articles(self, query):
+ """根据关键词搜索文章
+ :param query: 搜索关键词
+ :return: 匹配的前8条文章结果(含完整模型数据)
+ """
+ # 按关键词构建搜索查询
sqs = self.searchqueryset.auto_query(query)
+ # 加载完整的关联模型数据,避免延迟加载问题
sqs = sqs.load_all()
+ # 限制返回结果数量并返回
return sqs[:self.__max_takecount__]
def get_category_lists(self):
+ """获取所有博客分类
+ :return: 包含所有分类的查询集
+ """
return Category.objects.all()
def get_category_articles(self, categoryname):
+ """根据分类名称筛选该分类下的文章
+ :param categoryname: 目标分类名称
+ :return: 该分类下的前8条文章(无结果时返回None)
+ """
+ # 按分类名称过滤文章(跨模型匹配Category的name字段)
articles = Article.objects.filter(category__name=categoryname)
- if articles:
- return articles[:self.__max_takecount__]
- return None
+ return articles[:self.__max_takecount__] if articles else None
def get_recent_articles(self):
- return Article.objects.all()[:self.__max_takecount__]
+ """获取最新发布的文章
+ :return: 最新的8条文章查询集(默认按创建时间排序)
+ """
+ return Article.objects.all()[:self.__max_takecount__]
\ No newline at end of file