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