Compare commits

..

54 Commits

Author SHA1 Message Date
zhangyu 4a9aca3cc8 V1.0
3 months ago
zhangyu b89c83d91f Resolve merge conflicts: accept file deletions
3 months ago
zhangyu 77b4835a47 V1.0
3 months ago
prcsjxomk 6bc8c95ca7 Merge pull request 'wmw' (#12) from wmw_branch into develop
4 months ago
starrysky yuanye f01bf37760 feat: 第六周作业
4 months ago
starrysky yuanye a5e87f5478 feat: 第六周作业
4 months ago
prcsjxomk bb48692d4b Merge pull request 'chy' (#11) from chy_branch into develop
4 months ago
prcsjxomk 1b67c1cd4a Merge pull request 'xjh' (#10) from xjh_branch into develop
4 months ago
prcsjxomk 57ad107a50 Merge pull request 'zyg' (#9) from zyg_branch into develop
4 months ago
zyg123 e01da7978b 第六周
4 months ago
xjh123 9203ae6e45 第六周
4 months ago
chy 16280453dd 第六周
4 months ago
prcsjxomk 30910f745a Merge pull request 'zy' (#8) from zy_branch into develop
4 months ago
zhangyu 029004f302 第六周作业
4 months ago
zhangyu d999a80bc7 第六周作业
4 months ago
prcsjxomk f8710a5838 Merge pull request 'zy' (#7) from zy_branch into develop
4 months ago
prcsjxomk 92f26e9b63 Merge pull request 'chy' (#5) from chy_branch into develop
4 months ago
prcsjxomk 69b8a2c3fb Merge pull request 'zyg' (#4) from zyg_branch into develop
4 months ago
prcsjxomk 0c6c5deaf0 Merge pull request 'xjh' (#3) from xjh_branch into develop
4 months ago
prcsjxomk b588237954 Merge pull request 'wmw' (#2) from wmw_branch into develop
4 months ago
zhangyu e4305eec3a 合并 zy_branch 到 develop,解决 modify/delete 冲突
4 months ago
xjh123 79f17f6da6 第五周
4 months ago
starrysky yuanye fc4bcdfae2 feat: 第五周作业
4 months ago
chy ac6a4d8921 第五周
4 months ago
zhangyu e399e59d54 第五周
4 months ago
zyg123 81228bb3c9 第五周
4 months ago
starrysky yuanye 11b2ae07ff 同步
5 months ago
xjh123 2a5aae7897 同步
5 months ago
chy 3585d385ed 同步
5 months ago
zhangyu 5919d3fd02 云端数据库版本更新
5 months ago
zyg123 d68dbfc91b 同步
5 months ago
zhangyu 9cf68e5de0 1
5 months ago
zhangyu 011832b7ab v1.0
5 months ago
zhangyu e8541ab1a1 v1.0
5 months ago
zhangyu dff4740297 v1.0
5 months ago
zhangyu 1bd5a88c89 v1.0
5 months ago
zhangyu 256f3daf4e update
5 months ago
zhangyu 162f462dc2 update
5 months ago
zhangyu 37c4b4c00e update
5 months ago
zhangyu 0c1c18915c update
5 months ago
zhangyu 136d521b86 update
5 months ago
zhangyu de84c29b11 update
5 months ago
zhangyu ff108496b4 update
5 months ago
zhangyu 93969f99ee update
5 months ago
starrysky yuanye 734ef1bddc Merge branch 'wmw_branch' of https://bdgit.educoder.net/prcsjxomk/DjangoBlog into wmw_branch
5 months ago
starrysky yuanye 03816a988f feat: 添加 wmw .txt 到 doc 文件夹
5 months ago
prcsjxomk 9f94fd97b9 ADD file via upload
5 months ago
prcsjxomk 0cedadfb4f ADD file via upload
5 months ago
prcsjxomk 8cb3ebf6e6 ADD file via upload
5 months ago
prcsjxomk 60c30e136c ADD file via upload
5 months ago
prcsjxomk 4b790d2546 Add zyg_branch
5 months ago
prcsjxomk 56ebf77b80 ADD file via upload
5 months ago
prcsjxomk 78672a2e66 ADD file via upload
5 months ago
prcsjxomk 4b73716286 ADD file via upload
5 months ago

@ -1,2 +0,0 @@
# DjangoBlog

Binary file not shown.

@ -0,0 +1,135 @@
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import redirect, get_object_or_404
from django.views.generic.edit import CreateView, UpdateView
from django.urls import reverse_lazy
from .models import Article, Category, Tag
from .forms import ArticleForm
class ArticleCreateView(LoginRequiredMixin, CreateView):
"""创建文章视图"""
model = Article
form_class = ArticleForm
template_name = 'blog/article_create.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['all_categories'] = Category.objects.all()
context['all_tags'] = Tag.objects.all()
return context
def form_valid(self, form):
# 先不保存表单,先处理分类
form.instance.author = self.request.user
# 处理分类
category_name = form.cleaned_data['category']
category, created = Category.objects.get_or_create(
name=category_name,
defaults={'parent_category': None}
)
# 直接设置分类对象,而不是名称
form.instance.category = category
# 先保存文章实例,以便可以添加多对多关系
# 但在保存前先从表单中移除category字段避免表单尝试保存它
category_temp = form.cleaned_data.pop('category')
tags_temp = form.cleaned_data.pop('tags')
response = super().form_valid(form)
# 处理标签
if tags_temp:
tag_names = [tag.strip() for tag in tags_temp.split(',') if tag.strip()]
for tag_name in tag_names:
tag, created = Tag.objects.get_or_create(name=tag_name)
form.instance.tags.add(tag)
return response
def get_success_url(self):
return reverse_lazy('blog:detailbyid', kwargs={
'article_id': self.object.id,
'year': self.object.creation_time.year,
'month': self.object.creation_time.month,
'day': self.object.creation_time.day
})
class ArticleUpdateView(LoginRequiredMixin, UpdateView):
"""更新文章视图"""
model = Article
form_class = ArticleForm
template_name = 'blog/article_edit.html'
pk_url_kwarg = 'article_id'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['all_categories'] = Category.objects.all()
context['all_tags'] = Tag.objects.all()
return context
def get_initial(self):
initial = super().get_initial()
# 设置分类初始值
if self.object.category:
initial['category'] = self.object.category.name
# 设置标签初始值
if self.object.tags.exists():
tag_names = [tag.name for tag in self.object.tags.all()]
initial['tags'] = ', '.join(tag_names)
return initial
def dispatch(self, request, *args, **kwargs):
obj = self.get_object()
# 只有文章作者或管理员可以编辑
if obj.author != request.user and not request.user.is_superuser:
return redirect('blog:detailbyid',
article_id=obj.id,
year=obj.creation_time.year,
month=obj.creation_time.month,
day=obj.creation_time.day)
return super().dispatch(request, *args, **kwargs)
def form_valid(self, form):
# 先不保存表单,先处理分类
form.instance.author = self.request.user
# 处理分类
category_name = form.cleaned_data['category']
category, created = Category.objects.get_or_create(
name=category_name,
defaults={'parent_category': None}
)
# 直接设置分类对象,而不是名称
form.instance.category = category
# 先保存文章实例,以便可以添加多对多关系
# 但在保存前先从表单中移除category字段避免表单尝试保存它
category_temp = form.cleaned_data.pop('category')
tags_temp = form.cleaned_data.pop('tags')
response = super().form_valid(form)
# 处理标签
if tags_temp:
tag_names = [tag.strip() for tag in tags_temp.split(',') if tag.strip()]
form.instance.tags.clear() # 清除现有标签
for tag_name in tag_names:
tag, created = Tag.objects.get_or_create(name=tag_name)
form.instance.tags.add(tag)
else:
form.instance.tags.clear() # 如果没有标签,清除所有标签
return response
def get_success_url(self):
return reverse_lazy('blog:detailbyid', kwargs={
'article_id': self.object.id,
'year': self.object.creation_time.year,
'month': self.object.creation_time.month,
'day': self.object.creation_time.day
})

@ -1,7 +1,9 @@
import logging import logging
from django import forms from django import forms
from django.utils.translation import gettext_lazy as _
from haystack.forms import SearchForm from haystack.forms import SearchForm
from .models import Article, Category, Tag
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -17,3 +19,62 @@ class BlogSearchForm(SearchForm):
if self.cleaned_data['querydata']: if self.cleaned_data['querydata']:
logger.info(self.cleaned_data['querydata']) logger.info(self.cleaned_data['querydata'])
return datas return datas
class ArticleForm(forms.ModelForm):
"""文章表单"""
title = forms.CharField(label='标题', max_length=200, required=True)
body = forms.CharField(label='内容', widget=forms.Textarea(attrs={'id': 'id_body_md'}), required=True)
status = forms.ChoiceField(
label='状态',
choices=[('p', '发布'), ('d', '草稿')],
initial='p',
widget=forms.Select,
required=True
)
comment_status = forms.ChoiceField(
label='评论状态',
choices=[('o', '开启'), ('c', '关闭')],
initial='o',
widget=forms.Select,
required=True
)
type = forms.ChoiceField(
label='类型',
choices=[('a', '文章'), ('p', '页面')],
initial='a',
widget=forms.Select,
required=True
)
show_toc = forms.BooleanField(label='显示目录', required=False)
category = forms.CharField(
label='分类',
required=True,
widget=forms.TextInput(attrs={
'class': 'form-control',
'list': 'category-list',
'placeholder': '选择或输入分类名称'
})
)
tags = forms.CharField(
label='标签',
required=False,
widget=forms.TextInput(attrs={
'class': 'form-control',
'list': 'tag-list',
'placeholder': '选择或输入标签,多个标签用逗号分隔'
})
)
class Meta:
model = Article
fields = ['title', 'body', 'status', 'comment_status', 'type', 'show_toc']
def __init__(self, *args, **kwargs):
super(ArticleForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs.update({'class': 'form-control'})
self.fields['body'].widget.attrs.update({'class': 'form-control mdeditor', 'rows': 20})
self.fields['status'].widget.attrs.update({'class': 'form-control'})
self.fields['comment_status'].widget.attrs.update({'class': 'form-control'})
self.fields['type'].widget.attrs.update({'class': 'form-control'})
self.fields['show_toc'].widget.attrs.update({'class': 'form-check-input'})

@ -0,0 +1,15 @@
from django import forms
from django.utils.translation import gettext_lazy as _
from .models import ArticleImage
class ImageUploadForm(forms.ModelForm):
"""图片上传表单"""
class Meta:
model = ArticleImage
fields = ['image', 'description']
widgets = {
'image': forms.FileInput(attrs={'class': 'form-control', 'accept': 'image/*'}),
'description': forms.TextInput(attrs={'class': 'form-control', 'placeholder': _('可选,添加图片描述')})
}

@ -0,0 +1,118 @@
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from django.views.generic.edit import CreateView, DeleteView
from django.urls import reverse_lazy
from django.views.decorators.http import require_POST
from django.views.decorators.csrf import csrf_exempt
import json
from .models import Article, ArticleImage
from .forms_image import ImageUploadForm
class ImageUploadView(LoginRequiredMixin, CreateView):
"""上传图片视图"""
model = ArticleImage
form_class = ImageUploadForm
template_name = 'blog/image_upload.html'
def form_valid(self, form):
article_id = self.kwargs.get('article_id')
article = get_object_or_404(Article, id=article_id)
# 检查用户是否有权限上传图片
if article.author != self.request.user and not self.request.user.is_superuser:
return JsonResponse({'status': 'error', 'message': '没有权限上传图片'}, status=403)
form.instance.article = article
self.object = form.save()
# 返回JSON响应包含图片URL和ID
return JsonResponse({
'status': 'success',
'image_id': self.object.id,
'image_url': self.object.image.url,
'description': self.object.description
})
def form_invalid(self, form):
return JsonResponse({'status': 'error', 'errors': form.errors}, status=400)
@login_required
@require_POST
@csrf_exempt
def markdown_image_upload(request):
"""为Markdown编辑器提供的图片上传接口"""
if request.method == 'POST' and request.FILES.get('image'):
image_file = request.FILES['image']
try:
# 创建一个默认文章对象(如果需要的话)
# 或者使用一个特殊的标记值来表示这是一个临时图片
from blog.models import Article
default_article = Article.objects.filter(author=request.user).first()
if not default_article:
# 如果用户没有任何文章,创建一个临时的草稿文章
default_article = Article(
title="临时图片存储",
body="",
status="d", # 草稿状态
author=request.user
)
default_article.save()
# 创建图片对象,关联到默认文章
temp_image = ArticleImage(
image=image_file,
article=default_article,
description="Markdown编辑器上传"
)
# 保存图片
temp_image.save()
# 返回Markdown编辑器需要的格式
return JsonResponse({
'success': 1,
'message': '上传成功',
'url': temp_image.image.url
})
except Exception as e:
# 记录错误并返回失败信息
import logging
logger = logging.getLogger(__name__)
logger.error(f"图片上传失败: {str(e)}")
return JsonResponse({
'success': 0,
'message': f'上传失败: {str(e)}'
})
return JsonResponse({
'success': 0,
'message': '上传失败:未提供图片文件'
})
class ImageDeleteView(LoginRequiredMixin, DeleteView):
"""删除图片视图"""
model = ArticleImage
pk_url_kwarg = 'image_id'
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
# 检查用户是否有权限删除图片
if self.object.article.author != request.user and not request.user.is_superuser:
return JsonResponse({'status': 'error', 'message': '没有权限删除图片'}, status=403)
# 删除图片文件
self.object.image.delete()
self.object.delete()
return JsonResponse({'status': 'success', 'message': '图片已删除'})

@ -0,0 +1,41 @@
from django.core.management.base import BaseCommand
from blog.models import Category
class Command(BaseCommand):
help = '创建文章分类'
def handle(self, *args, **options):
categories = [
'技术',
'生活',
'旅行',
'美食',
'摄影',
'读书',
'电影',
'音乐',
'编程',
'设计',
'健康',
'教育',
'职场',
'财经',
'历史',
'文化',
'体育',
'游戏',
'科技'
]
for name in categories:
category, created = Category.objects.get_or_create(
name=name,
defaults={'parent_category': None}
)
if created:
self.stdout.write(self.style.SUCCESS(f'创建分类: {name}'))
else:
self.stdout.write(self.style.WARNING(f'分类已存在: {name}'))
self.stdout.write(self.style.SUCCESS('分类创建完成'))

@ -0,0 +1,13 @@
from django.core.management.base import BaseCommand
from blog.models import Category
class Command(BaseCommand):
help = '列出所有文章分类'
def handle(self, *args, **options):
categories = Category.objects.all()
self.stdout.write('当前数据库中的分类:')
for category in categories:
self.stdout.write(f'- {category.name} (ID: {category.id})')
self.stdout.write(f'总计: {categories.count()} 个分类')

@ -0,0 +1,29 @@
# Generated by Django 4.2.14 on 2025-11-20 20:45
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('blog', '0006_alter_blogsettings_options'),
]
operations = [
migrations.CreateModel(
name='ArticleImage',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(upload_to='article_images/%Y/%m/%d/', verbose_name='图片')),
('description', models.CharField(blank=True, max_length=255, verbose_name='图片描述')),
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='blog.article')),
],
options={
'verbose_name': '文章图片',
'verbose_name_plural': '文章图片',
'ordering': ['-created_time'],
},
),
]

@ -304,6 +304,22 @@ class SideBar(models.Model):
return self.name return self.name
class ArticleImage(models.Model):
"""文章图片模型"""
article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='images')
image = models.ImageField(_('图片'), upload_to='article_images/%Y/%m/%d/')
description = models.CharField(_('图片描述'), max_length=255, blank=True)
created_time = models.DateTimeField(_('创建时间'), auto_now_add=True)
class Meta:
verbose_name = _('文章图片')
verbose_name_plural = verbose_name
ordering = ['-created_time']
def __str__(self):
return f"{self.article.title} - {self.image.name}"
class BlogSettings(models.Model): class BlogSettings(models.Model):
"""blog的配置""" """blog的配置"""
site_name = models.CharField( site_name = models.CharField(

@ -1,162 +0,0 @@
/* 文章归档页面样式 */
/* 归档标题样式 */
.archive-header {
margin-bottom: 2rem;
padding: 1.5rem;
background: linear-gradient(135deg, var(--primary-color), #2980b9);
border-radius: 8px;
box-shadow: var(--box-shadow);
position: relative;
overflow: hidden;
}
.archive-header::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><rect width="100" height="100" fill="none"/><path d="M0 0L50 50M50 0L100 50M0 50L50 100M50 50L100 100" stroke="rgba(255,255,255,0.1)" stroke-width="0.5"/></svg>');
background-size: 100px 100px;
opacity: 0.5;
}
.archive-title {
font-size: 1.8rem;
font-weight: 600;
color: #fff;
margin: 0;
position: relative;
z-index: 1;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
/* 归档内容样式 */
.entry-content {
background-color: #fff;
border-radius: 8px;
box-shadow: var(--box-shadow);
padding: 2rem;
}
/* 年份样式 */
.archive-year {
margin-bottom: 1.5rem;
list-style-type: none;
position: relative;
padding-left: 2.5rem;
}
.archive-year::before {
content: '📅';
position: absolute;
left: 0;
top: 0.5rem;
width: 1.5rem;
height: 1.5rem;
background-color: var(--primary-color);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-weight: bold;
font-size: 0.8rem;
}
.year-label {
font-size: 1.3rem;
font-weight: 600;
color: var(--dark-color);
margin-bottom: 0.5rem;
display: block;
}
/* 月份样式 */
.archive-month {
margin-bottom: 1rem;
list-style-type: none;
position: relative;
padding-left: 2rem;
}
.archive-month::before {
content: '';
position: absolute;
left: 0;
top: 0.5rem;
width: 0.8rem;
height: 0.8rem;
background-color: var(--secondary-color);
border-radius: 50%;
}
.month-label {
font-size: 1.1rem;
font-weight: 500;
color: var(--dark-color);
margin-bottom: 0.5rem;
display: block;
}
/* 文章列表样式 */
.article-list {
margin-top: 0.5rem;
padding-left: 1rem;
}
.article-list > li {
margin-bottom: 0.5rem;
list-style-type: none;
position: relative;
padding-left: 1.5rem;
}
.article-list > li::before {
content: '📄';
position: absolute;
left: 0;
top: 0.2rem;
font-size: 0.9rem;
}
.article-list > li a {
color: var(--text-color);
text-decoration: none;
transition: var(--transition);
display: inline-block;
padding: 0.3rem 0.5rem;
border-radius: 4px;
}
.article-list > li a:hover {
color: var(--primary-color);
background-color: rgba(52, 152, 219, 0.1);
transform: translateX(5px);
}
/* 响应式设计 */
@media screen and (max-width: 768px) {
.archive-header {
padding: 1rem;
}
.archive-title {
font-size: 1.5rem;
}
.entry-content {
padding: 1rem;
}
.entry-content > ul > li {
padding-left: 2rem;
}
.entry-content > ul > li > ul > li {
padding-left: 1.5rem;
}
}

@ -1,22 +0,0 @@
/* 网页背景选项 - 默认背景和自定义图片背景 */
/* 自定义图片背景 - 请将图片放在 /blog/static/blog/images/ 目录下 */
.bg-custom-image {
background-image: url('{% static "blog/images/background.jpg" %}');
background-attachment: fixed;
background-size: cover;
background-position: center;
}
/* 半透明遮罩层,用于自定义图片背景上 */
.bg-overlay::before {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.7);
z-index: -1;
}

@ -1,640 +0,0 @@
/* 现代化样式 - DjangoBlog美化 */
/* 全局变量 */
:root {
--primary-color: #3498db;
--secondary-color: #2c3e50;
--accent-color: #e74c3c;
--light-color: #ecf0f1;
--dark-color: #2c3e50;
--text-color: #333;
--text-light: #777;
--border-color: #ddd;
--box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
--transition: all 0.3s ease;
}
/* 基础样式重置和优化 */
body {
font-family: 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
line-height: 1.6;
color: var(--text-color);
background-color: #f8f9fa;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><rect width="100" height="100" fill="%23f8f9fa"/><path d="M0 0L50 50M50 0L100 50M0 50L50 100M50 50L100 100" stroke="%23e9ecef" stroke-width="0.5"/></svg>');
background-attachment: fixed;
background-size: 100px 100px;
}
/* 网站容器 */
.site {
max-width: 1200px;
margin: 0 auto;
background-color: #fff;
box-shadow: var(--box-shadow);
border-radius: 8px;
overflow: hidden;
}
/* 头部样式 */
.site-header {
background: linear-gradient(135deg, var(--secondary-color), var(--primary-color));
color: #fff;
padding: 3rem 2rem;
text-align: center;
position: relative;
overflow: hidden;
}
.site-header::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320"><path fill="rgba(255,255,255,0.1)" d="M0,96L48,112C96,128,192,160,288,160C384,160,480,128,576,112C672,96,768,96,864,112C960,128,1056,160,1152,160C1248,160,1344,128,1392,112L1440,96L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path></svg>') no-repeat bottom;
background-size: cover;
opacity: 0.5;
}
.site-header h1, .site-header h2 {
position: relative;
z-index: 1;
margin: 0;
padding: 0;
}
.site-header h1 {
font-size: 2.5rem;
font-weight: 700;
margin-bottom: 0.5rem;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.site-header h1 a {
color: #fff;
text-decoration: none;
transition: var(--transition);
}
.site-header h1 a:hover {
opacity: 0.8;
transform: translateY(-2px);
}
.site-header h2 {
font-size: 1.2rem;
font-weight: 300;
opacity: 0.9;
}
/* 导航菜单样式 */
.main-navigation {
background-color: #fff;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
position: sticky;
top: 0;
z-index: 100;
border-top: 1px solid var(--border-color);
}
.main-navigation ul.nav-menu {
display: flex;
justify-content: center;
flex-wrap: wrap;
padding: 0;
margin: 0;
list-style: none;
}
.main-navigation li {
margin: 0;
position: relative;
}
.main-navigation a {
display: block;
padding: 1rem 1.5rem;
color: var(--dark-color);
text-decoration: none;
font-weight: 500;
transition: var(--transition);
position: relative;
}
.main-navigation a::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 3px;
background-color: var(--primary-color);
transition: var(--transition);
transform: translateX(-50%);
}
.main-navigation a:hover::after,
.main-navigation a:focus::after {
width: 80%;
}
.main-navigation a:hover,
.main-navigation a:focus {
color: var(--primary-color);
}
/* 主要内容区域 - 保持经典两栏布局 */
#main {
display: flex;
padding: 2rem;
gap: 2rem;
}
#primary {
flex: 0 0 65%;
max-width: 65%;
}
/* 文章样式 - 优化列表布局 */
article {
margin-bottom: 2rem;
padding: 1.5rem;
background-color: #fff;
border-radius: 8px;
box-shadow: var(--box-shadow);
transition: var(--transition);
border-left: 4px solid var(--primary-color);
}
article:hover {
transform: translateY(-3px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.entry-header {
margin-bottom: 1.5rem;
border-bottom: 1px solid var(--border-color);
padding-bottom: 1rem;
}
.entry-title {
font-size: 1.8rem;
margin-bottom: 0.5rem;
line-height: 1.3;
}
.entry-title a {
color: var(--dark-color);
text-decoration: none;
transition: var(--transition);
}
.entry-title a:hover {
color: var(--primary-color);
}
.entry-meta {
color: var(--text-light);
font-size: 0.9rem;
margin-bottom: 1rem;
}
.entry-meta a {
color: var(--primary-color);
text-decoration: none;
}
.entry-meta a:hover {
text-decoration: underline;
}
.entry-content {
line-height: 1.7;
}
.entry-content p {
margin-bottom: 1.2rem;
}
.entry-content img {
max-width: 100%;
height: auto;
border-radius: 4px;
margin: 1.5rem 0;
}
.read-more {
display: inline-block;
margin-top: 1rem;
padding: 0.5rem 1.2rem;
background-color: var(--primary-color);
color: #fff;
border-radius: 4px;
text-decoration: none;
transition: var(--transition);
font-weight: 500;
}
.read-more:hover {
background-color: #2980b9;
transform: translateY(-2px);
}
/* 侧边栏样式 - 保持右侧布局并优化外观 */
.widget-area {
flex: 0 0 30%;
max-width: 30%;
}
.widget {
margin-bottom: 2rem;
background-color: #fff;
border-radius: 8px;
box-shadow: var(--box-shadow);
padding: 1.5rem;
border-top: 3px solid var(--primary-color);
transition: var(--transition);
}
.widget:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.widget-title {
font-size: 1.2rem;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
border-bottom: 2px solid var(--primary-color);
color: var(--dark-color);
position: relative;
padding-left: 10px;
}
.widget-title::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0.5rem;
width: 4px;
background-color: var(--primary-color);
border-radius: 2px;
}
.widget ul {
list-style: none;
padding: 0;
margin: 0;
}
.widget li {
margin-bottom: 0.5rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid var(--border-color);
}
.widget li:last-child {
border-bottom: none;
}
.widget a {
color: var(--text-color);
text-decoration: none;
transition: var(--transition);
}
.widget a:hover {
color: var(--primary-color);
}
/* 分页样式 */
.pagination {
margin: 2rem 0;
display: flex;
justify-content: center;
gap: 0.5rem;
}
.pagination a, .pagination span {
display: block;
padding: 0.5rem 1rem;
border: 1px solid var(--border-color);
border-radius: 4px;
text-decoration: none;
transition: var(--transition);
}
.pagination a:hover {
background-color: var(--primary-color);
color: #fff;
border-color: var(--primary-color);
}
.pagination span.current {
background-color: var(--primary-color);
color: #fff;
border-color: var(--primary-color);
}
/* 评论区域 */
.comments-area {
margin-top: 2rem;
padding: 1.5rem;
background-color: #fff;
border-radius: 8px;
box-shadow: var(--box-shadow);
}
.comment-list {
list-style: none;
padding: 0;
margin: 0;
}
.comment {
margin-bottom: 1.5rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid var(--border-color);
}
.comment:last-child {
border-bottom: none;
}
.comment-author {
display: flex;
align-items: center;
margin-bottom: 0.5rem;
}
.comment-author img {
border-radius: 50%;
margin-right: 1rem;
}
.comment-meta {
font-size: 0.9rem;
color: var(--text-light);
margin-bottom: 1rem;
}
.comment-content {
line-height: 1.7;
}
/* 表单样式 */
form {
margin-top: 1.5rem;
}
.form-group {
margin-bottom: 1rem;
}
label {
display: block;
margin-bottom: 0.5rem;
font-weight: 500;
}
input[type="text"],
input[type="email"],
input[type="url"],
textarea {
width: 100%;
padding: 0.75rem;
border: 1px solid var(--border-color);
border-radius: 4px;
font-family: inherit;
font-size: 1rem;
transition: var(--transition);
}
input[type="text"]:focus,
input[type="email"]:focus,
input[type="url"]:focus,
textarea:focus {
border-color: var(--primary-color);
outline: none;
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
}
textarea {
min-height: 120px;
resize: vertical;
}
button, input[type="submit"] {
display: inline-block;
padding: 0.75rem 1.5rem;
background-color: var(--primary-color);
color: #fff;
border: none;
border-radius: 4px;
font-family: inherit;
font-size: 1rem;
font-weight: 500;
cursor: pointer;
transition: var(--transition);
}
button:hover, input[type="submit"]:hover {
background-color: #2980b9;
transform: translateY(-2px);
}
/* 页脚样式 */
#colophon {
background-color: var(--dark-color);
color: #fff;
padding: 2rem;
text-align: center;
}
.site-info {
margin-bottom: 1rem;
}
.site-info:last-child {
margin-bottom: 0;
}
.site-info a {
color: #fff;
text-decoration: none;
transition: var(--transition);
}
.site-info a:hover {
color: var(--primary-color);
text-decoration: underline;
}
/* 响应式设计 - 保持两栏布局直到移动设备 */
@media screen and (max-width: 992px) {
#main {
flex-direction: column;
}
#primary {
flex: 0 0 100%;
max-width: 100%;
padding-right: 0;
margin-bottom: 2rem;
}
.widget-area {
flex: 0 0 100%;
max-width: 100%;
}
}
@media screen and (max-width: 768px) {
.site-header {
padding: 2rem 1rem;
}
.site-header h1 {
font-size: 2rem;
}
.main-navigation ul.nav-menu {
flex-direction: column;
}
.main-navigation li {
width: 100%;
text-align: center;
}
#main {
padding: 1rem;
}
article, .widget {
padding: 1rem;
}
}
@media screen and (max-width: 480px) {
.site-header h1 {
font-size: 1.5rem;
}
.site-header h2 {
font-size: 1rem;
}
.entry-title {
font-size: 1.5rem;
}
}
/* 动画效果 */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
article {
animation: fadeIn 0.6s ease-out;
}
/* 滚动到顶部按钮 */
#back-to-top {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 50px;
height: 50px;
background-color: var(--primary-color);
color: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
opacity: 0;
visibility: hidden;
transition: var(--transition);
z-index: 1000;
box-shadow: var(--box-shadow);
}
#back-to-top.visible {
opacity: 1;
visibility: visible;
}
#back-to-top:hover {
background-color: #2980b9;
transform: translateY(-5px);
}
/* 搜索框样式 - 优化为侧边栏设计 */
.search-form {
position: relative;
margin-bottom: 1.5rem;
}
.search-form input[type="search"] {
width: 100%;
padding: 0.75rem 3rem 0.75rem 1.2rem;
border: 1px solid var(--border-color);
border-radius: 25px;
font-family: inherit;
font-size: 0.9rem;
transition: var(--transition);
background-color: #f9f9f9;
}
.search-form input[type="search"]:focus {
border-color: var(--primary-color);
outline: none;
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
background-color: #fff;
}
.search-form button {
position: absolute;
top: 50%;
right: 8px;
transform: translateY(-50%);
background: none;
border: none;
padding: 0.5rem;
color: var(--primary-color);
cursor: pointer;
border-radius: 50%;
transition: var(--transition);
}
.search-form button:hover {
background-color: rgba(52, 152, 219, 0.1);
}
/* 标签云样式 */
.tagcloud {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.tagcloud a {
display: inline-block;
padding: 0.3rem 0.8rem;
background-color: var(--light-color);
color: var(--dark-color);
border-radius: 15px;
font-size: 0.9rem;
text-decoration: none;
transition: var(--transition);
}
.tagcloud a:hover {
background-color: var(--primary-color);
color: #fff;
}

@ -1,16 +0,0 @@
# 博客背景图片
将您想用作背景的图片放在此目录下然后在background-options.css中更新路径。
支持的图片格式:
- JPG
- PNG
- GIF
- WebP
建议的图片尺寸:
- 宽度1920px或更大
- 高度1080px或更大
- 分辨率72dpi或更高
推荐使用有轻微纹理或图案的图片,避免过于复杂的图像,以免影响内容可读性。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 KiB

@ -1,185 +0,0 @@
// 背景切换工具
document.addEventListener('DOMContentLoaded', function() {
// 创建背景切换器
function createBackgroundSwitcher() {
// 创建背景切换器容器
const switcher = document.createElement('div');
switcher.className = 'bg-switcher';
switcher.innerHTML = `
<button class="bg-switcher-toggle" title="切换背景">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 2V4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 20V22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M4.93 4.93L6.34 6.34" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.66 17.66L19.07 19.07" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 12H4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M20 12H22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.34 17.66L4.93 19.07" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M19.07 4.93L17.66 6.34" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</button>
<div class="bg-switcher-panel">
<h4>选择背景</h4>
<div class="bg-options">
<button class="bg-option active" data-bg="default">默认</button>
<button class="bg-option" data-bg="custom-image">自定义背景</button>
</div>
</div>
`;
// 添加样式
const style = document.createElement('style');
style.textContent = `
.bg-switcher {
position: fixed;
bottom: 20px;
left: 20px;
z-index: 1000;
}
.bg-switcher-toggle {
width: 50px;
height: 50px;
border-radius: 50%;
background-color: var(--primary-color);
color: white;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
box-shadow: var(--box-shadow);
transition: var(--transition);
}
.bg-switcher-toggle:hover {
background-color: #2980b9;
transform: scale(1.1);
}
.bg-switcher-panel {
position: absolute;
bottom: 60px;
left: 0;
background-color: white;
border-radius: 8px;
box-shadow: var(--box-shadow);
padding: 15px;
width: 200px;
opacity: 0;
visibility: hidden;
transform: translateY(10px);
transition: var(--transition);
}
.bg-switcher.active .bg-switcher-panel {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.bg-switcher-panel h4 {
margin: 0 0 10px;
font-size: 16px;
color: var(--dark-color);
}
.bg-options {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.bg-option {
padding: 8px;
border: 1px solid var(--border-color);
border-radius: 4px;
background-color: #f9f9f9;
cursor: pointer;
transition: var(--transition);
font-size: 14px;
}
.bg-option:hover {
background-color: #f0f0f0;
border-color: var(--primary-color);
}
.bg-option.active {
background-color: var(--primary-color);
color: white;
border-color: var(--primary-color);
}
`;
document.head.appendChild(style);
// 添加到页面
document.body.appendChild(switcher);
// 切换面板显示/隐藏
const toggle = switcher.querySelector('.bg-switcher-toggle');
toggle.addEventListener('click', function() {
switcher.classList.toggle('active');
});
// 点击其他地方关闭面板
document.addEventListener('click', function(e) {
if (!switcher.contains(e.target)) {
switcher.classList.remove('active');
}
});
// 背景切换功能
const options = switcher.querySelectorAll('.bg-option');
options.forEach(option => {
option.addEventListener('click', function() {
// 移除所有active类
options.forEach(opt => opt.classList.remove('active'));
// 添加active类到当前选项
this.classList.add('active');
// 切换背景
const bgType = this.getAttribute('data-bg');
switchBackground(bgType);
// 保存用户选择
localStorage.setItem('preferredBackground', bgType);
});
});
// 检查用户之前的选择
const savedBg = localStorage.getItem('preferredBackground');
if (savedBg) {
// 设置对应的选项为active
options.forEach(opt => {
if (opt.getAttribute('data-bg') === savedBg) {
opt.classList.add('active');
} else {
opt.classList.remove('active');
}
});
// 应用保存的背景
switchBackground(savedBg);
}
}
// 切换背景函数
function switchBackground(bgType) {
const body = document.body;
// 移除所有背景类
body.classList.remove('bg-custom-image', 'bg-overlay');
// 根据类型添加对应的背景类
if (bgType === 'custom-image') {
body.classList.add('bg-custom-image', 'bg-overlay');
}
}
// 初始化背景切换器
createBackgroundSwitcher();
});

@ -1,134 +0,0 @@
// 现代化UI交互效果
document.addEventListener('DOMContentLoaded', function() {
// 返回顶部按钮功能
const backToTopButton = document.getElementById('back-to-top');
if (backToTopButton) {
// 监听滚动事件
window.addEventListener('scroll', function() {
// 当页面滚动超过300px时显示返回顶部按钮
if (window.pageYOffset > 300) {
backToTopButton.classList.add('visible');
} else {
backToTopButton.classList.remove('visible');
}
});
// 点击返回顶部
backToTopButton.addEventListener('click', function(e) {
e.preventDefault();
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
}
// 为所有外部链接添加target="_blank"属性
const links = document.querySelectorAll('a[href^="http"]:not([href*="' + window.location.hostname + '"])');
links.forEach(function(link) {
link.setAttribute('target', '_blank');
link.setAttribute('rel', 'noopener noreferrer');
});
// 文章内容图片添加懒加载效果
const articleImages = document.querySelectorAll('.entry-content img');
if ('IntersectionObserver' in window) {
const imageObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
const img = entry.target;
img.classList.add('fade-in');
imageObserver.unobserve(img);
}
});
});
articleImages.forEach(function(img) {
imageObserver.observe(img);
});
}
// 搜索框交互效果
const searchForms = document.querySelectorAll('.search-form');
searchForms.forEach(function(form) {
const input = form.querySelector('input[type="search"]');
const button = form.querySelector('button');
if (input && button) {
input.addEventListener('focus', function() {
form.classList.add('active');
});
input.addEventListener('blur', function() {
if (!input.value) {
form.classList.remove('active');
}
});
}
});
// 为代码块添加复制按钮
const codeBlocks = document.querySelectorAll('pre code');
codeBlocks.forEach(function(block) {
const button = document.createElement('button');
button.className = 'copy-button';
button.textContent = '复制';
button.setAttribute('title', '复制代码');
const pre = block.parentElement;
pre.style.position = 'relative';
pre.appendChild(button);
button.addEventListener('click', function() {
navigator.clipboard.writeText(block.textContent).then(function() {
button.textContent = '已复制!';
setTimeout(function() {
button.textContent = '复制';
}, 2000);
}).catch(function(err) {
console.error('复制失败:', err);
});
});
});
});
// 添加代码块复制按钮的CSS
const style = document.createElement('style');
style.textContent = `
.copy-button {
position: absolute;
top: 8px;
right: 8px;
background-color: rgba(0, 0, 0, 0.7);
color: white;
border: none;
border-radius: 4px;
padding: 4px 8px;
font-size: 12px;
cursor: pointer;
opacity: 0;
transition: opacity 0.2s;
}
pre:hover .copy-button {
opacity: 1;
}
.fade-in {
animation: fadeIn 0.6s ease-out;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
.search-form.active input[type="search"] {
border-color: var(--primary-color);
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
}
`;
document.head.appendChild(style);

@ -2,6 +2,8 @@ from django.urls import path
from django.views.decorators.cache import cache_page from django.views.decorators.cache import cache_page
from . import views from . import views
from . import article_views
from . import image_views
app_name = "blog" app_name = "blog"
urlpatterns = [ urlpatterns = [
@ -17,6 +19,18 @@ urlpatterns = [
r'article/<int:year>/<int:month>/<int:day>/<int:article_id>.html', r'article/<int:year>/<int:month>/<int:day>/<int:article_id>.html',
views.ArticleDetailView.as_view(), views.ArticleDetailView.as_view(),
name='detailbyid'), name='detailbyid'),
path(
r'article/create/',
article_views.ArticleCreateView.as_view(),
name='article_create'),
path(
r'article/edit/<int:article_id>/',
article_views.ArticleUpdateView.as_view(),
name='article_edit'),
path(
r'my-articles/',
views.my_articles,
name='my_articles'),
path( path(
r'category/<slug:category_name>.html', r'category/<slug:category_name>.html',
views.CategoryDetailView.as_view(), views.CategoryDetailView.as_view(),
@ -59,4 +73,17 @@ urlpatterns = [
r'clean', r'clean',
views.clean_cache_view, views.clean_cache_view,
name='clean'), name='clean'),
# 图片相关路由
path(
'article/<int:article_id>/upload-image/',
image_views.ImageUploadView.as_view(),
name='upload_image'),
path(
'markdown-image-upload/',
image_views.markdown_image_upload,
name='markdown_image_upload'),
path(
'image/<int:image_id>/delete/',
image_views.ImageDeleteView.as_view(),
name='delete_image'),
] ]

@ -378,3 +378,82 @@ def permission_denied_view(
def clean_cache_view(request): def clean_cache_view(request):
cache.clear() cache.clear()
return HttpResponse('ok') return HttpResponse('ok')
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import redirect
from django.views.generic.edit import CreateView, UpdateView
from django.urls import reverse_lazy
from .forms import ArticleForm
class ArticleCreateView(LoginRequiredMixin, CreateView):
"""创建文章视图"""
model = Article
form_class = ArticleForm
template_name = 'blog/article_create.html'
def form_valid(self, form):
form.instance.author = self.request.user
# 处理分类
category_name = form.cleaned_data['category']
category, created = Category.objects.get_or_create(
name=category_name,
defaults={'parent_category': None}
)
form.instance.category = category
# 处理标签
tags_str = form.cleaned_data['tags']
if tags_str:
tag_names = [tag.strip() for tag in tags_str.split(',') if tag.strip()]
form.instance.save() # 保存文章实例,以便可以添加多对多关系
for tag_name in tag_names:
tag, created = Tag.objects.get_or_create(name=tag_name)
form.instance.tags.add(tag)
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy('blog:detailbyid', kwargs={
'article_id': self.object.id,
'year': self.object.creation_time.year,
'month': self.object.creation_time.month,
'day': self.object.creation_time.day
})
class ArticleUpdateView(LoginRequiredMixin, UpdateView):
"""更新文章视图"""
model = Article
form_class = ArticleForm
template_name = 'blog/article_edit.html'
pk_url_kwarg = 'article_id'
def dispatch(self, request, *args, **kwargs):
obj = self.get_object()
# 只有文章作者或管理员可以编辑
if obj.author != request.user and not request.user.is_superuser:
return redirect('blog:detailbyid',
article_id=obj.id,
year=obj.creation_time.year,
month=obj.creation_time.month,
day=obj.creation_time.day)
return super().dispatch(request, *args, **kwargs)
def get_success_url(self):
return reverse_lazy('blog:detailbyid', kwargs={
'article_id': self.object.id,
'year': self.object.creation_time.year,
'month': self.object.creation_time.month,
'day': self.object.creation_time.day
})
@login_required
def my_articles(request):
"""显示当前用户的文章列表"""
articles = Article.objects.filter(author=request.user)
return render(request, 'blog/my_articles.html', {'articles': articles})

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -665,3 +665,95 @@ msgstr "快捷登录"
#: .\templates\share_layout\nav.html:26 #: .\templates\share_layout\nav.html:26
msgid "Article archive" msgid "Article archive"
msgstr "文章归档" msgstr "文章归档"
#: .\templates\share_layout\nav.html:29
msgid "Create Article"
msgstr "创建文章"
#: .\templates\share_layout\nav.html:33
msgid "My Articles"
msgstr "我的文章"
#: .\templates\blog\article_create.html:5
msgid "Create Article"
msgstr "创建文章"
#: .\templates\blog\article_edit.html:5
msgid "Edit Article"
msgstr "编辑文章"
#: .\templates\blog\my_articles.html:5
msgid "My Articles"
msgstr "我的文章"
#: .\templates\share_layout\nav.html:29
msgid "发布文章"
msgstr "发布文章"
#: .\templates\share_layout\nav.html:33
msgid "我的文章"
msgstr "我的文章"
#: .\templates\blog\article_create.html:97
msgid "发布"
msgstr "发布"
#: .\templates\blog\article_create.html:98
msgid "取消"
msgstr "取消"
#: .\templates\blog\article_edit.html:97
msgid "更新"
msgstr "更新"
#: .\templates\blog\article_edit.html:98
msgid "取消"
msgstr "取消"
#: .\templates\blog\my_articles.html:13
msgid "发布新文章"
msgstr "发布新文章"
#: .\templates\blog\my_articles.html:22
msgid "标题"
msgstr "标题"
#: .\templates\blog\my_articles.html:23
msgid "状态"
msgstr "状态"
#: .\templates\blog\my_articles.html:24
msgid "分类"
msgstr "分类"
#: .\templates\blog\my_articles.html:25
msgid "创建时间"
msgstr "创建时间"
#: .\templates\blog\my_articles.html:26
msgid "浏览量"
msgstr "浏览量"
#: .\templates\blog\my_articles.html:27
msgid "操作"
msgstr "操作"
#: .\templates\blog\my_articles.html:38
msgid "已发布"
msgstr "已发布"
#: .\templates\blog\my_articles.html:40
msgid "草稿"
msgstr "草稿"
#: .\templates\blog\my_articles.html:48
msgid "编辑"
msgstr "编辑"
#: .\templates\blog\my_articles.html:58
msgid "您还没有创建任何文章。"
msgstr "您还没有创建任何文章。"
#: .\templates\blog\my_articles.html:59
msgid "创建您的第一篇文章"
msgstr "创建您的第一篇文章"

@ -0,0 +1,821 @@
[2025-11-20 20:26:53,871] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:26:53,871] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:26:53,872] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:26:53,872] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:26:53,874] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:26:53,874] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:26:53,874] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:26:53,874] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:26:53,876] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:26:53,876] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:26:53,876] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:26:53,876] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:26:53,878] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:26:53,878] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:26:53,879] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:26:53,879] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:26:53,881] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:26:53,881] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:26:53,881] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:26:53,881] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:26:53,884] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:26:53,884] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:26:53,884] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:26:53,884] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:26:53,886] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:26:53,886] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:26:53,887] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:26:53,887] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:27:08,086] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:27:08,086] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:27:08,087] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:27:08,087] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:27:08,088] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:27:08,088] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:27:08,088] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:27:08,088] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:27:08,089] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:27:08,089] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:27:08,089] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:27:08,089] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:27:08,090] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:27:08,090] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:27:08,091] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:27:08,091] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:27:08,092] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:27:08,092] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:27:08,092] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:27:08,092] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:27:08,093] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:27:08,093] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:27:08,093] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:27:08,093] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:27:08,094] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:27:08,094] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:27:08,094] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:27:08,094] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:27:09,050] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:27:09,050] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:27:09,050] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:27:09,050] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:27:09,051] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:27:09,051] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:27:09,052] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:27:09,052] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:27:09,053] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:27:09,053] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:27:09,053] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:27:09,053] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:27:09,054] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:27:09,054] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:27:09,054] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:27:09,054] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:27:09,055] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:27:09,055] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:27:09,055] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:27:09,055] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:27:09,057] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:27:09,057] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:27:09,057] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:27:09,057] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:27:09,058] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:27:09,058] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:27:09,058] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:27:09,058] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:27:09,072] INFO [django.utils.autoreload.run_with_reloader:668 autoreload] Watching for file changes with StatReloader
[2025-11-20 20:27:32,502] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:27:32,579] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:27:32,618] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:27:32,618] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:27:33,984] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:27:34,312] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:27:37,984] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_不知道_1
[2025-11-20 20:27:38,238] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:27:38,393] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebarl
[2025-11-20 20:29:12,662] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:29:12,662] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:29:12,665] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:29:12,665] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:29:12,666] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:29:12,666] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:29:12,668] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:29:12,668] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:29:12,670] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:29:12,670] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:29:12,672] INFO [accounts.views.form_valid:123 views] next
[2025-11-20 20:29:13,070] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/test.html"]}
[2025-11-20 20:29:13,070] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/test.html"]}
[2025-11-20 20:29:13,074] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:29:13,074] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:29:13,076] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:29:13,076] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:29:13,078] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:29:13,078] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:29:13,079] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:29:13,079] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:29:13,080] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:29:13,080] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:29:13,081] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:29:13,081] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:29:13,369] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:29:13,372] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:29:13,415] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:29:13,415] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:29:14,372] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:29:14,691] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:30:21,554] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:tag_不知道_1
[2025-11-20 20:30:21,855] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:30:22,027] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebarl
[2025-11-20 20:30:26,108] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:category_list_Java_1
[2025-11-20 20:31:33,241] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:31:33,241] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:31:33,242] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:33,242] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:33,243] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:33,243] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:33,243] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:33,243] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:33,244] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:33,244] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:33,244] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:33,244] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:33,378] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:33,378] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:33,379] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:33,379] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:33,379] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:33,379] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:33,380] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:33,380] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:33,380] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:33,380] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:40,134] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:40,134] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:40,135] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:40,135] INFO [accounts.views.form_valid:123 views] next
[2025-11-20 20:31:40,545] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/admin.html"]}
[2025-11-20 20:31:40,545] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/admin.html"]}
[2025-11-20 20:31:40,546] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 20:31:40,546] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 20:31:40,547] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:40,547] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:31:40,547] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:40,547] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:31:40,548] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:40,548] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:31:40,548] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:40,548] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:31:40,549] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:40,549] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:31:40,964] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:31:40,966] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:31:41,293] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:31:41,293] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:31:42,514] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:31:42,839] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:36:28,679] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:36:28,679] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:36:28,681] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:36:28,681] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:36:28,681] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:36:28,681] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:36:28,682] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:36:28,682] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:36:28,683] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:36:28,683] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:36:28,683] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:36:28,683] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:36:28,684] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:36:28,684] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:36:28,684] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:36:28,684] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:36:28,685] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:36:28,685] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:36:28,685] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:36:28,685] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:36:28,686] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:36:28,686] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:36:28,687] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:36:28,687] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:36:28,690] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:36:28,690] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:36:28,690] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:36:28,690] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:36:29,367] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:36:29,367] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:36:29,367] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:36:29,367] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:36:29,368] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:36:29,368] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:36:29,369] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:36:29,369] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:36:29,369] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:36:29,369] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:36:29,370] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:36:29,370] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:36:29,371] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:36:29,371] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:36:29,371] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:36:29,371] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:36:29,372] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:36:29,372] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:36:29,372] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:36:29,372] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:36:29,373] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:36:29,373] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:36:29,374] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:36:29,374] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:36:29,375] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:36:29,375] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:36:29,375] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:36:29,375] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:36:29,389] INFO [django.utils.autoreload.run_with_reloader:668 autoreload] Watching for file changes with StatReloader
[2025-11-20 20:36:32,674] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:36:32,677] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:36:32,715] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:36:32,715] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:36:33,557] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:36:33,950] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:37:06,588] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 20:37:06,588] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 20:37:06,589] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:06,589] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:06,590] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:06,590] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:06,591] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:06,591] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:06,591] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:06,591] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:06,592] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:06,592] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:06,677] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:06,677] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:06,678] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:06,678] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:06,678] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:06,678] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:06,678] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:06,678] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:06,679] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:06,679] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:16,657] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:16,657] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:16,657] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:16,657] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:16,658] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:16,658] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:16,658] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:16,658] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:16,658] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:16,658] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:16,658] INFO [accounts.views.form_valid:123 views] next
[2025-11-20 20:37:17,094] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/test.html"]}
[2025-11-20 20:37:17,094] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/test.html"]}
[2025-11-20 20:37:17,095] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:37:17,095] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:37:17,095] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:17,095] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:37:17,096] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:17,096] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:37:17,096] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:17,096] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:37:17,096] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:17,096] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:37:17,098] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:17,098] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:37:17,349] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:37:17,350] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:37:17,404] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:37:17,404] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:37:18,343] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:37:18,662] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:44:50,016] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:44:50,016] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:44:50,016] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:44:50,016] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:44:50,018] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:44:50,018] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:44:50,018] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:44:50,018] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:44:50,019] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:44:50,019] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:44:50,019] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:44:50,019] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:44:50,020] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:44:50,020] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:44:50,020] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:44:50,020] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:44:50,021] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:44:50,021] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:44:50,021] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:44:50,021] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:44:50,022] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:44:50,022] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:44:50,022] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:44:50,022] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:44:50,023] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:44:50,023] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:44:50,023] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:44:50,023] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:45:12,809] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:45:12,809] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:45:12,809] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:45:12,809] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:45:12,810] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:45:12,810] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:45:12,810] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:45:12,810] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:45:12,811] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:45:12,811] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:45:12,812] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:45:12,812] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:45:12,813] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:45:12,813] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:45:12,813] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:45:12,813] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:45:12,814] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:45:12,814] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:45:12,814] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:45:12,814] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:45:12,815] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:45:12,815] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:45:12,815] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:45:12,815] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:45:12,816] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:45:12,816] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:45:12,816] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:45:12,816] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:45:30,626] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:45:30,626] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:45:30,627] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:45:30,627] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:45:30,628] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:45:30,628] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:45:30,628] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:45:30,628] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:45:30,629] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:45:30,629] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:45:30,629] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:45:30,629] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:45:30,630] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:45:30,630] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:45:30,630] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:45:30,630] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:45:30,631] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:45:30,631] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:45:30,631] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:45:30,631] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:45:30,632] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:45:30,632] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:45:30,633] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:45:30,633] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:45:30,634] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:45:30,634] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:45:30,635] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:45:30,635] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:46:06,729] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:46:06,729] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:46:06,729] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:46:06,729] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:46:06,730] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:46:06,730] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:46:06,730] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:46:06,730] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:46:06,731] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:46:06,731] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:46:06,732] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:46:06,732] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:46:06,732] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:46:06,732] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:46:06,733] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:46:06,733] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:46:06,734] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:46:06,734] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:46:06,734] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:46:06,734] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:46:06,735] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:46:06,735] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:46:06,735] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:46:06,735] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:46:06,736] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:46:06,736] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:46:06,736] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:46:06,736] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:46:07,409] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:46:07,409] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:46:07,409] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:46:07,409] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:46:07,410] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:46:07,410] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:46:07,411] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:46:07,411] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:46:07,412] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:46:07,412] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:46:07,412] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:46:07,412] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:46:07,412] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:46:07,412] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:46:07,413] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:46:07,413] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:46:07,414] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:46:07,414] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:46:07,414] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:46:07,414] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:46:07,415] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:46:07,415] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:46:07,416] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:46:07,416] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:46:07,416] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:46:07,416] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:46:07,417] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:46:07,417] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:46:07,429] INFO [django.utils.autoreload.run_with_reloader:668 autoreload] Watching for file changes with StatReloader
[2025-11-20 20:46:11,534] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:46:11,538] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:46:11,616] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:46:11,616] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:46:12,493] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:46:12,774] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:50:20,513] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:50:20,513] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:50:20,513] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:50:20,513] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:50:20,514] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:50:20,514] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:50:20,514] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:50:20,514] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:50:20,515] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:50:20,515] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:50:20,516] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:50:20,516] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:50:20,516] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:50:20,516] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:50:20,517] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:50:20,517] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:50:20,518] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:50:20,518] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:50:20,518] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:50:20,518] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:50:20,519] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:50:20,519] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:50:20,519] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:50:20,519] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:50:20,520] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:50:20,520] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:50:20,521] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:50:20,521] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:50:21,201] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:50:21,201] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:50:21,201] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:50:21,201] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:50:21,202] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:50:21,202] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:50:21,202] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:50:21,202] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:50:21,203] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:50:21,203] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:50:21,203] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:50:21,203] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:50:21,204] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:50:21,204] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:50:21,204] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:50:21,204] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:50:21,205] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:50:21,205] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:50:21,206] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:50:21,206] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:50:21,206] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:50:21,206] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:50:21,209] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:50:21,209] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:50:21,210] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:50:21,210] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:50:21,210] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:50:21,210] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:50:21,224] INFO [django.utils.autoreload.run_with_reloader:668 autoreload] Watching for file changes with StatReloader
[2025-11-20 20:50:24,080] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:50:24,084] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:50:24,383] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:50:24,383] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:50:25,984] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:50:26,572] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:50:38,579] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
[2025-11-20 20:58:03,877] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:58:03,877] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:58:03,877] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:58:03,877] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:58:03,878] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:58:03,878] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:58:03,879] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:58:03,879] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:58:03,880] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:58:03,880] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:58:03,880] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:58:03,880] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:58:03,881] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:58:03,881] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:58:03,882] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:58:03,882] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:58:03,884] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:58:03,884] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:58:03,884] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:58:03,884] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:58:03,885] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:58:03,885] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:58:03,885] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:58:03,885] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:58:03,887] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:58:03,887] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:58:03,887] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:58:03,887] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:58:04,548] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:58:04,548] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized.
[2025-11-20 20:58:04,548] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:58:04,548] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明
[2025-11-20 20:58:04,549] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:58:04,549] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized.
[2025-11-20 20:58:04,549] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:58:04,549] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测
[2025-11-20 20:58:04,550] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:58:04,550] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized.
[2025-11-20 20:58:04,551] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:58:04,551] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器
[2025-11-20 20:58:04,551] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:58:04,551] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized.
[2025-11-20 20:58:04,551] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:58:04,551] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计
[2025-11-20 20:58:04,552] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:58:04,552] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized.
[2025-11-20 20:58:04,553] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:58:04,553] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器
[2025-11-20 20:58:04,554] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:58:04,554] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized.
[2025-11-20 20:58:04,554] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:58:04,554] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件
[2025-11-20 20:58:04,555] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:58:04,555] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized.
[2025-11-20 20:58:04,555] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:58:04,555] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐
[2025-11-20 20:58:04,567] INFO [django.utils.autoreload.run_with_reloader:668 autoreload] Watching for file changes with StatReloader
[2025-11-20 20:58:07,536] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:58:07,540] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:58:07,576] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:58:07,576] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:58:08,449] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:58:08,716] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:58:29,662] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/11/20/5.html"]}
[2025-11-20 20:58:29,662] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/11/20/5.html"]}
[2025-11-20 20:58:29,976] INFO [blog.models.comment_list:151 models] set article comments:5
[2025-11-20 20:58:30,011] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:58:30,011] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:58:30,164] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:58:30,164] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:58:30,165] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:58:30,165] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:58:30,165] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:58:30,201] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:58:30,677] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:58:30,677] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:58:30,677] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:58:30,678] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:58:30,678] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:58:30,893] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:58:31,317] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebarp
[2025-11-20 20:58:38,918] INFO [blog.models.comment_list:151 models] set article comments:5
[2025-11-20 20:58:39,034] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:58:39,034] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:58:39,035] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:58:39,035] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:58:39,035] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:58:39,461] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:58:39,461] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:58:39,462] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:58:39,462] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:58:39,462] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:58:42,570] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:58:44,020] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:58:44,179] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:58:48,940] INFO [blog.models.comment_list:151 models] set article comments:2
[2025-11-20 20:58:49,042] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:58:49,045] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:58:49,045] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 20:58:49,045] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:58:49,045] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:58:49,441] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:58:49,442] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:58:49,442] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 20:58:49,442] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:58:49,443] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:58:49,639] INFO [blog.templatetags.blog_tags.gravatar_url:396 blog_tags] Using default avatar for test@test.com
[2025-11-20 20:59:00,115] INFO [blog.models.comment_list:151 models] set article comments:5
[2025-11-20 20:59:00,256] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:59:00,256] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:59:00,257] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:59:00,258] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:59:00,258] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:59:00,666] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:59:00,666] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:59:00,666] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:59:00,667] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:59:00,667] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:59:23,458] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/11/20/5.html"]}
[2025-11-20 20:59:23,458] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/11/20/5.html"]}
[2025-11-20 20:59:23,792] INFO [blog.models.comment_list:151 models] set article comments:5
[2025-11-20 20:59:23,831] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:59:23,831] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:59:23,958] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:59:23,959] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:59:23,959] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:59:23,959] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:59:23,960] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:59:23,981] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:59:24,429] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 20:59:24,430] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 20:59:24,431] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 20:59:24,431] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 20:59:24,432] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 20:59:24,549] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:59:24,824] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebarp
[2025-11-20 20:59:34,294] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:59:35,098] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:59:35,254] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 20:59:42,040] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:59:42,040] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 20:59:42,041] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:42,041] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:42,041] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:42,041] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:42,041] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:42,041] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:42,042] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:42,042] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:42,042] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:42,042] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:42,141] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:42,141] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:42,142] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:42,142] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:42,142] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:42,142] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:42,142] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:42,142] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:42,143] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:42,143] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:49,383] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:49,383] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:49,384] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:49,384] INFO [accounts.views.form_valid:123 views] next
[2025-11-20 20:59:49,866] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/admin.html"]}
[2025-11-20 20:59:49,866] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/admin.html"]}
[2025-11-20 20:59:49,867] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 20:59:49,867] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 20:59:49,868] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:49,868] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 20:59:49,869] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:49,869] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 20:59:49,869] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:49,869] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 20:59:49,869] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:49,869] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 20:59:49,870] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:49,870] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 20:59:50,078] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 20:59:50,079] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 20:59:50,122] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:59:50,122] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 20:59:50,925] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 20:59:51,204] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 21:00:50,033] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/15/2.html"]}
[2025-11-20 21:00:50,033] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/15/2.html"]}
[2025-11-20 21:00:50,431] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 21:00:50,470] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 21:00:50,470] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 21:01:06,787] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 21:01:07,628] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 21:01:07,911] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 21:02:26,248] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/15/2.html"]}
[2025-11-20 21:02:26,248] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/article/2025/10/15/2.html"]}
[2025-11-20 21:02:26,695] INFO [blog.models.comment_list:151 models] set article comments:2
[2025-11-20 21:02:26,839] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 21:02:26,839] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 21:02:26,945] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:02:26,945] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:02:26,946] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 21:02:26,946] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 21:02:26,947] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 21:02:26,968] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 21:02:27,376] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:02:27,376] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:02:27,377] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 21:02:27,377] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 21:02:27,377] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 21:02:27,552] INFO [blog.templatetags.blog_tags.gravatar_url:396 blog_tags] Using default avatar for test@test.com
[2025-11-20 21:02:27,651] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 21:02:27,941] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebarp
[2025-11-20 21:02:57,873] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 21:02:58,702] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 21:02:58,860] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 21:03:02,932] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 21:03:02,932] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] admin@admin123.com
[2025-11-20 21:03:02,933] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:02,933] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:02,934] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:02,934] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:02,934] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:02,934] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:02,934] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:02,934] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:02,935] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:02,935] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:03,028] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:03,028] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:03,029] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:03,029] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:03,029] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:03,029] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:03,030] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:03,030] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:03,031] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:03,031] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:10,259] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:10,259] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:10,260] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:10,261] INFO [accounts.views.form_valid:123 views] next
[2025-11-20 21:03:10,891] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/test.html"]}
[2025-11-20 21:03:10,891] INFO [djangoblog.spider_notify.baidu_notify:15 spider_notify] {"remain":10,"success":0,"not_same_site":["https://example.com/author/test.html"]}
[2025-11-20 21:03:10,892] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 21:03:10,892] INFO [djangoblog.blog_signals.user_auth_callback:120 blog_signals] test@test.com
[2025-11-20 21:03:10,892] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:10,892] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebari
[2025-11-20 21:03:10,893] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:10,893] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarl
[2025-11-20 21:03:10,893] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:10,893] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebarp
[2025-11-20 21:03:10,894] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:10,894] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebara
[2025-11-20 21:03:10,894] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:10,894] INFO [djangoblog.utils.delete_sidebar_cache:208 utils] delete sidebar key:sidebars
[2025-11-20 21:03:11,272] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1
[2025-11-20 21:03:11,273] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache.
[2025-11-20 21:03:11,458] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 21:03:11,458] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting
[2025-11-20 21:03:12,674] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 21:03:12,988] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari
[2025-11-20 21:03:18,179] INFO [blog.models.comment_list:151 models] set article comments:2
[2025-11-20 21:03:18,293] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:03:18,294] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:03:18,294] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 21:03:18,294] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 21:03:18,295] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 21:03:18,686] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:03:18,687] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:03:18,687] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 21:03:18,688] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 21:03:18,689] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 21:03:18,881] INFO [blog.templatetags.blog_tags.gravatar_url:396 blog_tags] Using default avatar for test@test.com
[2025-11-20 21:03:18,989] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar
[2025-11-20 21:03:19,157] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebarp
[2025-11-20 21:07:59,835] INFO [blog.views.get_queryset_from_cache:70 views] get view cache.key:index_1
[2025-11-20 21:08:05,251] INFO [blog.models.comment_list:146 models] get article comments:2
[2025-11-20 21:08:05,362] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:08:05,362] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:08:05,363] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 21:08:05,363] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 21:08:05,363] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 21:08:05,757] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:08:05,758] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:08:05,758] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=5, 标题='1', 长度=1
[2025-11-20 21:08:05,759] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 21:08:05,759] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=4, 标题='原批太恶心了', 长度=6
[2025-11-20 21:08:57,317] INFO [blog.models.comment_list:151 models] set article comments:4
[2025-11-20 21:08:57,465] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:08:57,465] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:08:57,465] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 21:08:57,466] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=5, 标题='1', 长度=1
[2025-11-20 21:08:57,466] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=3, 标题='杂交赛区跪下!!!', 长度=9
[2025-11-20 21:08:57,963] INFO [plugins.article_recommendation.plugin.get_recommendations:191 plugin] 原始推荐数量: 4, 有效推荐数量: 4
[2025-11-20 21:08:57,964] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 1: ID=1, 标题='震惊代码出现重大bug', 长度=15
[2025-11-20 21:08:57,965] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 2: ID=2, 标题='二次元真恶心', 长度=6
[2025-11-20 21:08:57,966] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 3: ID=5, 标题='1', 长度=1
[2025-11-20 21:08:57,967] INFO [plugins.article_recommendation.plugin.get_recommendations:193 plugin] 推荐 4: ID=3, 标题='杂交赛区跪下!!!', 长度=9

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save