diff --git a/src/.coveragerc b/src/.coveragerc new file mode 100644 index 0000000..9757484 --- /dev/null +++ b/src/.coveragerc @@ -0,0 +1,10 @@ +[run] +source = . +include = *.py +omit = + *migrations* + *tests* + *.html + *whoosh_cn_backend* + *settings.py* + *venv* diff --git a/src/.gitignore b/src/.gitignore index db55910..76302b1 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -62,7 +62,6 @@ target/ # http://www.jetbrains.com/pycharm/webhelp/project.html .idea .iml - # virtualenv venv/ diff --git a/src/.vscode/launch.json b/src/.vscode/launch.json new file mode 100644 index 0000000..f5f50ec --- /dev/null +++ b/src/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + + "version": "0.2.0", + "configurations": [ + { + "name": "Django: Run Server (Debug)", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/manage.py", + "args": [ + "runserver", + "--noreload", // 禁用自动重载以确保断点命中 + "127.0.0.1:8000" // 指定主机和端口 + ], + "django": true, // 启用Django特定支持 + "console": "integratedTerminal" // 在集成终端中输出 + } + ] +} diff --git a/src/accounts/__pycache__/__init__.cpython-311.pyc b/src/accounts/__pycache__/__init__.cpython-311.pyc index fcbcbb4..fde4d05 100644 Binary files a/src/accounts/__pycache__/__init__.cpython-311.pyc and b/src/accounts/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/admin.cpython-311.pyc b/src/accounts/__pycache__/admin.cpython-311.pyc index 0037466..4faf4a1 100644 Binary files a/src/accounts/__pycache__/admin.cpython-311.pyc and b/src/accounts/__pycache__/admin.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/apps.cpython-311.pyc b/src/accounts/__pycache__/apps.cpython-311.pyc index 398ebe0..a59634c 100644 Binary files a/src/accounts/__pycache__/apps.cpython-311.pyc and b/src/accounts/__pycache__/apps.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/forms.cpython-311.pyc b/src/accounts/__pycache__/forms.cpython-311.pyc index ff4df44..22b4e8e 100644 Binary files a/src/accounts/__pycache__/forms.cpython-311.pyc and b/src/accounts/__pycache__/forms.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/models.cpython-311.pyc b/src/accounts/__pycache__/models.cpython-311.pyc index 9534702..20b237e 100644 Binary files a/src/accounts/__pycache__/models.cpython-311.pyc and b/src/accounts/__pycache__/models.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/urls.cpython-311.pyc b/src/accounts/__pycache__/urls.cpython-311.pyc index a9ca468..66af091 100644 Binary files a/src/accounts/__pycache__/urls.cpython-311.pyc and b/src/accounts/__pycache__/urls.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/user_login_backend.cpython-311.pyc b/src/accounts/__pycache__/user_login_backend.cpython-311.pyc index c5a70cc..798bfd8 100644 Binary files a/src/accounts/__pycache__/user_login_backend.cpython-311.pyc and b/src/accounts/__pycache__/user_login_backend.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/utils.cpython-311.pyc b/src/accounts/__pycache__/utils.cpython-311.pyc index abeb67c..9fb3583 100644 Binary files a/src/accounts/__pycache__/utils.cpython-311.pyc and b/src/accounts/__pycache__/utils.cpython-311.pyc differ diff --git a/src/accounts/__pycache__/views.cpython-311.pyc b/src/accounts/__pycache__/views.cpython-311.pyc index 8649eb1..92a8bb5 100644 Binary files a/src/accounts/__pycache__/views.cpython-311.pyc and b/src/accounts/__pycache__/views.cpython-311.pyc differ diff --git a/src/accounts/admin.py b/src/accounts/admin.py index 29d162a..0434b8a 100644 --- a/src/accounts/admin.py +++ b/src/accounts/admin.py @@ -4,7 +4,6 @@ from django.contrib.auth.forms import UserChangeForm from django.contrib.auth.forms import UsernameField from django.utils.translation import gettext_lazy as _ -# Register your models here. from .models import BlogUser @@ -17,7 +16,6 @@ class BlogUserCreationForm(forms.ModelForm): fields = ('email',) def clean_password2(self): - # Check that the two password entries match password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: @@ -25,7 +23,6 @@ class BlogUserCreationForm(forms.ModelForm): return password2 def save(self, commit=True): - # Save the provided password in hashed format user = super().save(commit=False) user.set_password(self.cleaned_data["password1"]) if commit: @@ -47,6 +44,24 @@ class BlogUserChangeForm(UserChangeForm): class BlogUserAdmin(UserAdmin): form = BlogUserChangeForm add_form = BlogUserCreationForm + + # 添加这些关键定义 + fieldsets = ( + (None, {'fields': ('username', 'password')}), + (_('Personal info'), {'fields': ('nickname', 'email', 'first_name', 'last_name')}), + (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', + 'groups', 'user_permissions')}), + (_('Important dates'), {'fields': ('last_login', 'date_joined')}), + (_('Source'), {'fields': ('source',)}), + ) + + add_fieldsets = ( + (None, { + 'classes': ('wide',), + 'fields': ('username', 'email', 'password1', 'password2'), + }), + ) + list_display = ( 'id', 'nickname', @@ -57,4 +72,4 @@ class BlogUserAdmin(UserAdmin): 'source') list_display_links = ('id', 'username') ordering = ('-id',) - search_fields = ('username', 'nickname', 'email') + search_fields = ('username', 'nickname', 'email') \ No newline at end of file diff --git a/src/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc b/src/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc index 32ed8c2..6c26aa5 100644 Binary files a/src/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc and b/src/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/src/accounts/migrations/__pycache__/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.cpython-311.pyc b/src/accounts/migrations/__pycache__/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.cpython-311.pyc index aa1c1cb..8aec6da 100644 Binary files a/src/accounts/migrations/__pycache__/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.cpython-311.pyc and b/src/accounts/migrations/__pycache__/0002_alter_bloguser_options_remove_bloguser_created_time_and_more.cpython-311.pyc differ diff --git a/src/accounts/migrations/__pycache__/__init__.cpython-311.pyc b/src/accounts/migrations/__pycache__/__init__.cpython-311.pyc index f2ec0c2..5e23d42 100644 Binary files a/src/accounts/migrations/__pycache__/__init__.cpython-311.pyc and b/src/accounts/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/accounts/templatetags/__pycache__/__init__.cpython-311.pyc b/src/accounts/templatetags/__pycache__/__init__.cpython-311.pyc index 4c9eced..cbbaeae 100644 Binary files a/src/accounts/templatetags/__pycache__/__init__.cpython-311.pyc and b/src/accounts/templatetags/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/bin/docker_start.sh b/src/bin/docker_start.sh new file mode 100644 index 0000000..0be35a5 --- /dev/null +++ b/src/bin/docker_start.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +NAME="djangoblog" +DJANGODIR=/code/djangoblog +USER=root +GROUP=root +NUM_WORKERS=1 +DJANGO_WSGI_MODULE=djangoblog.wsgi + + +echo "Starting $NAME as `whoami`" + +cd $DJANGODIR + +export PYTHONPATH=$DJANGODIR:$PYTHONPATH + +python manage.py makemigrations && \ + python manage.py migrate && \ + python manage.py collectstatic --noinput && \ + python manage.py compress --force && \ + python manage.py build_index && \ + python manage.py compilemessages + +exec gunicorn ${DJANGO_WSGI_MODULE}:application \ +--name $NAME \ +--workers $NUM_WORKERS \ +--user=$USER --group=$GROUP \ +--bind 0.0.0.0:8000 \ +--log-level=debug \ +--log-file=- \ +--worker-class gevent \ +--threads 4 diff --git a/src/bin/nginx.conf b/src/bin/nginx.conf new file mode 100644 index 0000000..32161d8 --- /dev/null +++ b/src/bin/nginx.conf @@ -0,0 +1,50 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + + server { + root /code/djangoblog/collectedstatic/; + listen 80; + keepalive_timeout 70; + location /static/ { + expires max; + alias /code/djangoblog/collectedstatic/; + } + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; + proxy_redirect off; + if (!-f $request_filename) { + proxy_pass http://djangoblog:8000; + break; + } + } + } +} diff --git a/src/blog/__pycache__/__init__.cpython-311.pyc b/src/blog/__pycache__/__init__.cpython-311.pyc index d0938f6..7427588 100644 Binary files a/src/blog/__pycache__/__init__.cpython-311.pyc and b/src/blog/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/blog/__pycache__/admin.cpython-311.pyc b/src/blog/__pycache__/admin.cpython-311.pyc index 2d8e9ad..118e2b0 100644 Binary files a/src/blog/__pycache__/admin.cpython-311.pyc and b/src/blog/__pycache__/admin.cpython-311.pyc differ diff --git a/src/blog/__pycache__/apps.cpython-311.pyc b/src/blog/__pycache__/apps.cpython-311.pyc index 7ce15d7..4f47c02 100644 Binary files a/src/blog/__pycache__/apps.cpython-311.pyc and b/src/blog/__pycache__/apps.cpython-311.pyc differ diff --git a/src/blog/__pycache__/context_processors.cpython-311.pyc b/src/blog/__pycache__/context_processors.cpython-311.pyc index d51d48a..520645d 100644 Binary files a/src/blog/__pycache__/context_processors.cpython-311.pyc and b/src/blog/__pycache__/context_processors.cpython-311.pyc differ diff --git a/src/blog/__pycache__/documents.cpython-311.pyc b/src/blog/__pycache__/documents.cpython-311.pyc index 55a0db8..428ead8 100644 Binary files a/src/blog/__pycache__/documents.cpython-311.pyc and b/src/blog/__pycache__/documents.cpython-311.pyc differ diff --git a/src/blog/__pycache__/middleware.cpython-311.pyc b/src/blog/__pycache__/middleware.cpython-311.pyc index 04af0e6..07d696b 100644 Binary files a/src/blog/__pycache__/middleware.cpython-311.pyc and b/src/blog/__pycache__/middleware.cpython-311.pyc differ diff --git a/src/blog/__pycache__/models.cpython-311.pyc b/src/blog/__pycache__/models.cpython-311.pyc index 96421ae..a707f38 100644 Binary files a/src/blog/__pycache__/models.cpython-311.pyc and b/src/blog/__pycache__/models.cpython-311.pyc differ diff --git a/src/blog/__pycache__/urls.cpython-311.pyc b/src/blog/__pycache__/urls.cpython-311.pyc index efc4a26..fa75302 100644 Binary files a/src/blog/__pycache__/urls.cpython-311.pyc and b/src/blog/__pycache__/urls.cpython-311.pyc differ diff --git a/src/blog/__pycache__/views.cpython-311.pyc b/src/blog/__pycache__/views.cpython-311.pyc index a53519f..53309ba 100644 Binary files a/src/blog/__pycache__/views.cpython-311.pyc and b/src/blog/__pycache__/views.cpython-311.pyc differ diff --git a/src/blog/migrations/__pycache__/0001_initial.cpython-311.pyc b/src/blog/migrations/__pycache__/0001_initial.cpython-311.pyc index b55453d..a3cf1b7 100644 Binary files a/src/blog/migrations/__pycache__/0001_initial.cpython-311.pyc and b/src/blog/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/src/blog/migrations/__pycache__/0002_blogsettings_global_footer_and_more.cpython-311.pyc b/src/blog/migrations/__pycache__/0002_blogsettings_global_footer_and_more.cpython-311.pyc index b55bc80..36df054 100644 Binary files a/src/blog/migrations/__pycache__/0002_blogsettings_global_footer_and_more.cpython-311.pyc and b/src/blog/migrations/__pycache__/0002_blogsettings_global_footer_and_more.cpython-311.pyc differ diff --git a/src/blog/migrations/__pycache__/0003_blogsettings_comment_need_review.cpython-311.pyc b/src/blog/migrations/__pycache__/0003_blogsettings_comment_need_review.cpython-311.pyc index a437303..0a9fab9 100644 Binary files a/src/blog/migrations/__pycache__/0003_blogsettings_comment_need_review.cpython-311.pyc and b/src/blog/migrations/__pycache__/0003_blogsettings_comment_need_review.cpython-311.pyc differ diff --git a/src/blog/migrations/__pycache__/0004_rename_analyticscode_blogsettings_analytics_code_and_more.cpython-311.pyc b/src/blog/migrations/__pycache__/0004_rename_analyticscode_blogsettings_analytics_code_and_more.cpython-311.pyc index 9f3de32..04ad362 100644 Binary files a/src/blog/migrations/__pycache__/0004_rename_analyticscode_blogsettings_analytics_code_and_more.cpython-311.pyc and b/src/blog/migrations/__pycache__/0004_rename_analyticscode_blogsettings_analytics_code_and_more.cpython-311.pyc differ diff --git a/src/blog/migrations/__pycache__/0005_alter_article_options_alter_category_options_and_more.cpython-311.pyc b/src/blog/migrations/__pycache__/0005_alter_article_options_alter_category_options_and_more.cpython-311.pyc index 04942a6..a8d8413 100644 Binary files a/src/blog/migrations/__pycache__/0005_alter_article_options_alter_category_options_and_more.cpython-311.pyc and b/src/blog/migrations/__pycache__/0005_alter_article_options_alter_category_options_and_more.cpython-311.pyc differ diff --git a/src/blog/migrations/__pycache__/0006_alter_blogsettings_options.cpython-311.pyc b/src/blog/migrations/__pycache__/0006_alter_blogsettings_options.cpython-311.pyc index 8545b5c..72f33bd 100644 Binary files a/src/blog/migrations/__pycache__/0006_alter_blogsettings_options.cpython-311.pyc and b/src/blog/migrations/__pycache__/0006_alter_blogsettings_options.cpython-311.pyc differ diff --git a/src/blog/migrations/__pycache__/__init__.cpython-311.pyc b/src/blog/migrations/__pycache__/__init__.cpython-311.pyc index 409964f..91dfc28 100644 Binary files a/src/blog/migrations/__pycache__/__init__.cpython-311.pyc and b/src/blog/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/blog/static/blog/fonts/fonts.css b/src/blog/static/blog/fonts/fonts.css new file mode 100644 index 0000000..c1a29cf --- /dev/null +++ b/src/blog/static/blog/fonts/fonts.css @@ -0,0 +1,378 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + font-display: fallback; + src: url(mem6YaGs126MiZpBA-UFUK0Zdc0.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + font-display: fallback; + src: url(memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UN_r8OUuhp.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(mem8YaGs126MiZpBA-UFWJ0bbck.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(mem8YaGs126MiZpBA-UFUZ0bbck.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(mem8YaGs126MiZpBA-UFWZ0bbck.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(mem8YaGs126MiZpBA-UFVp0bbck.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(mem8YaGs126MiZpBA-UFWp0bbck.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(mem8YaGs126MiZpBA-UFW50bbck.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + font-display: fallback; + src: url(mem8YaGs126MiZpBA-UFVZ0b.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + font-display: fallback; + src: url(mem5YaGs126MiZpBA-UNirkOUuhp.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2 new file mode 100644 index 0000000..2c47cc5 Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OUehpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OUuhp.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OUuhp.woff2 new file mode 100644 index 0000000..601706a Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OUuhp.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2 new file mode 100644 index 0000000..119f1d7 Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OVuhpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2 new file mode 100644 index 0000000..d56688f Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OX-hpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2 new file mode 100644 index 0000000..e1f546c Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXOhpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2 new file mode 100644 index 0000000..0f17e3d Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXehpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2 new file mode 100644 index 0000000..50d8183 Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UN_r8OXuhpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2 new file mode 100644 index 0000000..b935198 Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOUehpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOUuhp.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOUuhp.woff2 new file mode 100644 index 0000000..d77bb4c Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOUuhp.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2 new file mode 100644 index 0000000..e293ffc Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOVuhpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2 new file mode 100644 index 0000000..46fd61b Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOX-hpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2 new file mode 100644 index 0000000..88a1616 Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXOhpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2 new file mode 100644 index 0000000..2100b6b Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXehpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2 b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2 new file mode 100644 index 0000000..d54c7c0 Binary files /dev/null and b/src/blog/static/blog/fonts/mem5YaGs126MiZpBA-UNirkOXuhpOqc.woff2 differ diff --git a/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2 b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2 new file mode 100644 index 0000000..683014d Binary files /dev/null and b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Udc1UAw.woff2 differ diff --git a/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2 b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2 new file mode 100644 index 0000000..72eb246 Binary files /dev/null and b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Vdc1UAw.woff2 differ diff --git a/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2 b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2 new file mode 100644 index 0000000..6da5562 Binary files /dev/null and b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Wdc1UAw.woff2 differ diff --git a/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2 b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2 new file mode 100644 index 0000000..2f22c67 Binary files /dev/null and b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Xdc1UAw.woff2 differ diff --git a/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Zdc0.woff2 b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Zdc0.woff2 new file mode 100644 index 0000000..28c6c76 Binary files /dev/null and b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0Zdc0.woff2 differ diff --git a/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2 b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2 new file mode 100644 index 0000000..fdeb9a4 Binary files /dev/null and b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0adc1UAw.woff2 differ diff --git a/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2 b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2 new file mode 100644 index 0000000..2a48105 Binary files /dev/null and b/src/blog/static/blog/fonts/mem6YaGs126MiZpBA-UFUK0ddc1UAw.woff2 differ diff --git a/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFUZ0bbck.woff2 b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFUZ0bbck.woff2 new file mode 100644 index 0000000..1ddef14 Binary files /dev/null and b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFUZ0bbck.woff2 differ diff --git a/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFVZ0b.woff2 b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFVZ0b.woff2 new file mode 100644 index 0000000..1d5e847 Binary files /dev/null and b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFVZ0b.woff2 differ diff --git a/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFVp0bbck.woff2 b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFVp0bbck.woff2 new file mode 100644 index 0000000..0e22822 Binary files /dev/null and b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFVp0bbck.woff2 differ diff --git a/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFW50bbck.woff2 b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFW50bbck.woff2 new file mode 100644 index 0000000..f621005 Binary files /dev/null and b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFW50bbck.woff2 differ diff --git a/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWJ0bbck.woff2 b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWJ0bbck.woff2 new file mode 100644 index 0000000..49018f9 Binary files /dev/null and b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWJ0bbck.woff2 differ diff --git a/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWZ0bbck.woff2 b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWZ0bbck.woff2 new file mode 100644 index 0000000..a69a2ef Binary files /dev/null and b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWZ0bbck.woff2 differ diff --git a/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWp0bbck.woff2 b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWp0bbck.woff2 new file mode 100644 index 0000000..fb5fb99 Binary files /dev/null and b/src/blog/static/blog/fonts/mem8YaGs126MiZpBA-UFWp0bbck.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2 new file mode 100644 index 0000000..db9a5bd Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hkIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2 new file mode 100644 index 0000000..7a9e2e3 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hlIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2 new file mode 100644 index 0000000..a9d17c0 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hmIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2 new file mode 100644 index 0000000..b76038f Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hnIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2 new file mode 100644 index 0000000..06a53d5 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hoIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2 new file mode 100644 index 0000000..94dc4e4 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hrIqM.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2 new file mode 100644 index 0000000..8197c39 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKWyV9hvIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2 new file mode 100644 index 0000000..b9cd540 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhkIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2 new file mode 100644 index 0000000..fa2e381 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhlIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2 new file mode 100644 index 0000000..da3f7ec Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhmIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2 new file mode 100644 index 0000000..0b42119 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhnIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2 new file mode 100644 index 0000000..36bdef1 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhoIqOjjg.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2 new file mode 100644 index 0000000..4b60ed4 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhrIqM.woff2 differ diff --git a/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2 b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2 new file mode 100644 index 0000000..d214090 Binary files /dev/null and b/src/blog/static/blog/fonts/memnYaGs126MiZpBA-UFUKXGUdhvIqOjjg.woff2 differ diff --git a/src/blog/static/mathjax/js/mathjax-config.js b/src/blog/static/mathjax/js/mathjax-config.js new file mode 100644 index 0000000..158ba65 --- /dev/null +++ b/src/blog/static/mathjax/js/mathjax-config.js @@ -0,0 +1,21 @@ +$(function () { + MathJax.Hub.Config({ + showProcessingMessages: false, //关闭js加载过程信息 + messageStyle: "none", //不显示信息 + extensions: ["tex2jax.js"], jax: ["input/TeX", "output/HTML-CSS"], displayAlign: "left", tex2jax: { + inlineMath: [["$", "$"]], //行内公式选择$ + displayMath: [["$$", "$$"]], //段内公式选择$$ + skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code', 'a'], //避开某些标签 + }, "HTML-CSS": { + availableFonts: ["STIX", "TeX"], //可选字体 + showMathMenu: false //关闭右击菜单显示 + } + }); + // 识别范围 => 文章内容、评论内容标签 + const contentId = document.getElementById("content"); + const commentId = document.getElementById("comments"); + MathJax.Hub.Queue(["Typeset", MathJax.Hub, contentId, commentId]); +}) + + + diff --git a/src/blog/templatetags/__pycache__/__init__.cpython-311.pyc b/src/blog/templatetags/__pycache__/__init__.cpython-311.pyc index 7c87c52..3889cef 100644 Binary files a/src/blog/templatetags/__pycache__/__init__.cpython-311.pyc and b/src/blog/templatetags/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/blog/templatetags/__pycache__/blog_tags.cpython-311.pyc b/src/blog/templatetags/__pycache__/blog_tags.cpython-311.pyc index a293b4e..0edc96f 100644 Binary files a/src/blog/templatetags/__pycache__/blog_tags.cpython-311.pyc and b/src/blog/templatetags/__pycache__/blog_tags.cpython-311.pyc differ diff --git a/src/comments/__pycache__/__init__.cpython-311.pyc b/src/comments/__pycache__/__init__.cpython-311.pyc index b1e41f4..728d159 100644 Binary files a/src/comments/__pycache__/__init__.cpython-311.pyc and b/src/comments/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/comments/__pycache__/admin.cpython-311.pyc b/src/comments/__pycache__/admin.cpython-311.pyc index 2726138..ab8ac24 100644 Binary files a/src/comments/__pycache__/admin.cpython-311.pyc and b/src/comments/__pycache__/admin.cpython-311.pyc differ diff --git a/src/comments/__pycache__/apps.cpython-311.pyc b/src/comments/__pycache__/apps.cpython-311.pyc index 84938a9..643ad39 100644 Binary files a/src/comments/__pycache__/apps.cpython-311.pyc and b/src/comments/__pycache__/apps.cpython-311.pyc differ diff --git a/src/comments/__pycache__/forms.cpython-311.pyc b/src/comments/__pycache__/forms.cpython-311.pyc index 24b4e2d..76e09d5 100644 Binary files a/src/comments/__pycache__/forms.cpython-311.pyc and b/src/comments/__pycache__/forms.cpython-311.pyc differ diff --git a/src/comments/__pycache__/models.cpython-311.pyc b/src/comments/__pycache__/models.cpython-311.pyc index c9b5fa4..ae6d064 100644 Binary files a/src/comments/__pycache__/models.cpython-311.pyc and b/src/comments/__pycache__/models.cpython-311.pyc differ diff --git a/src/comments/__pycache__/urls.cpython-311.pyc b/src/comments/__pycache__/urls.cpython-311.pyc index d956f07..1989e5a 100644 Binary files a/src/comments/__pycache__/urls.cpython-311.pyc and b/src/comments/__pycache__/urls.cpython-311.pyc differ diff --git a/src/comments/__pycache__/utils.cpython-311.pyc b/src/comments/__pycache__/utils.cpython-311.pyc index b3686a7..368d9e1 100644 Binary files a/src/comments/__pycache__/utils.cpython-311.pyc and b/src/comments/__pycache__/utils.cpython-311.pyc differ diff --git a/src/comments/__pycache__/views.cpython-311.pyc b/src/comments/__pycache__/views.cpython-311.pyc index 09fdbc9..3b9cd58 100644 Binary files a/src/comments/__pycache__/views.cpython-311.pyc and b/src/comments/__pycache__/views.cpython-311.pyc differ diff --git a/src/comments/migrations/__pycache__/0001_initial.cpython-311.pyc b/src/comments/migrations/__pycache__/0001_initial.cpython-311.pyc index 69906d3..2679ff5 100644 Binary files a/src/comments/migrations/__pycache__/0001_initial.cpython-311.pyc and b/src/comments/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/src/comments/migrations/__pycache__/0002_alter_comment_is_enable.cpython-311.pyc b/src/comments/migrations/__pycache__/0002_alter_comment_is_enable.cpython-311.pyc index f9ac124..7ff0895 100644 Binary files a/src/comments/migrations/__pycache__/0002_alter_comment_is_enable.cpython-311.pyc and b/src/comments/migrations/__pycache__/0002_alter_comment_is_enable.cpython-311.pyc differ diff --git a/src/comments/migrations/__pycache__/0003_alter_comment_options_remove_comment_created_time_and_more.cpython-311.pyc b/src/comments/migrations/__pycache__/0003_alter_comment_options_remove_comment_created_time_and_more.cpython-311.pyc index 42046f5..97f76df 100644 Binary files a/src/comments/migrations/__pycache__/0003_alter_comment_options_remove_comment_created_time_and_more.cpython-311.pyc and b/src/comments/migrations/__pycache__/0003_alter_comment_options_remove_comment_created_time_and_more.cpython-311.pyc differ diff --git a/src/comments/migrations/__pycache__/__init__.cpython-311.pyc b/src/comments/migrations/__pycache__/__init__.cpython-311.pyc index 2cbcb26..4902e16 100644 Binary files a/src/comments/migrations/__pycache__/__init__.cpython-311.pyc and b/src/comments/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/comments/templatetags/__pycache__/__init__.cpython-311.pyc b/src/comments/templatetags/__pycache__/__init__.cpython-311.pyc index 2674528..3fb7b3c 100644 Binary files a/src/comments/templatetags/__pycache__/__init__.cpython-311.pyc and b/src/comments/templatetags/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/comments/templatetags/__pycache__/comments_tags.cpython-311.pyc b/src/comments/templatetags/__pycache__/comments_tags.cpython-311.pyc index 0c0e74f..d2f2e94 100644 Binary files a/src/comments/templatetags/__pycache__/comments_tags.cpython-311.pyc and b/src/comments/templatetags/__pycache__/comments_tags.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/__init__.cpython-311.pyc b/src/djangoblog/__pycache__/__init__.cpython-311.pyc index 4bbb66d..ca737f1 100644 Binary files a/src/djangoblog/__pycache__/__init__.cpython-311.pyc and b/src/djangoblog/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/admin_site.cpython-311.pyc b/src/djangoblog/__pycache__/admin_site.cpython-311.pyc index fe46b58..bedc2bd 100644 Binary files a/src/djangoblog/__pycache__/admin_site.cpython-311.pyc and b/src/djangoblog/__pycache__/admin_site.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/apps.cpython-311.pyc b/src/djangoblog/__pycache__/apps.cpython-311.pyc index 5625e14..04dd331 100644 Binary files a/src/djangoblog/__pycache__/apps.cpython-311.pyc and b/src/djangoblog/__pycache__/apps.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/blog_signals.cpython-311.pyc b/src/djangoblog/__pycache__/blog_signals.cpython-311.pyc index 15a83c9..a57555a 100644 Binary files a/src/djangoblog/__pycache__/blog_signals.cpython-311.pyc and b/src/djangoblog/__pycache__/blog_signals.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/elasticsearch_backend.cpython-311.pyc b/src/djangoblog/__pycache__/elasticsearch_backend.cpython-311.pyc index 280c86a..a7adca7 100644 Binary files a/src/djangoblog/__pycache__/elasticsearch_backend.cpython-311.pyc and b/src/djangoblog/__pycache__/elasticsearch_backend.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/feeds.cpython-311.pyc b/src/djangoblog/__pycache__/feeds.cpython-311.pyc index cd2a5e3..045476a 100644 Binary files a/src/djangoblog/__pycache__/feeds.cpython-311.pyc and b/src/djangoblog/__pycache__/feeds.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/logentryadmin.cpython-311.pyc b/src/djangoblog/__pycache__/logentryadmin.cpython-311.pyc index 66b789c..42131af 100644 Binary files a/src/djangoblog/__pycache__/logentryadmin.cpython-311.pyc and b/src/djangoblog/__pycache__/logentryadmin.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/settings.cpython-311.pyc b/src/djangoblog/__pycache__/settings.cpython-311.pyc index ff9af05..16c32a7 100644 Binary files a/src/djangoblog/__pycache__/settings.cpython-311.pyc and b/src/djangoblog/__pycache__/settings.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/sitemap.cpython-311.pyc b/src/djangoblog/__pycache__/sitemap.cpython-311.pyc index 6f17766..527cd15 100644 Binary files a/src/djangoblog/__pycache__/sitemap.cpython-311.pyc and b/src/djangoblog/__pycache__/sitemap.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/spider_notify.cpython-311.pyc b/src/djangoblog/__pycache__/spider_notify.cpython-311.pyc index 440f302..3137872 100644 Binary files a/src/djangoblog/__pycache__/spider_notify.cpython-311.pyc and b/src/djangoblog/__pycache__/spider_notify.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/urls.cpython-311.pyc b/src/djangoblog/__pycache__/urls.cpython-311.pyc index 2a9007d..2a9f10a 100644 Binary files a/src/djangoblog/__pycache__/urls.cpython-311.pyc and b/src/djangoblog/__pycache__/urls.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/utils.cpython-311.pyc b/src/djangoblog/__pycache__/utils.cpython-311.pyc index 52d6751..5da0bed 100644 Binary files a/src/djangoblog/__pycache__/utils.cpython-311.pyc and b/src/djangoblog/__pycache__/utils.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/whoosh_cn_backend.cpython-311.pyc b/src/djangoblog/__pycache__/whoosh_cn_backend.cpython-311.pyc index 0f23af0..63db9a9 100644 Binary files a/src/djangoblog/__pycache__/whoosh_cn_backend.cpython-311.pyc and b/src/djangoblog/__pycache__/whoosh_cn_backend.cpython-311.pyc differ diff --git a/src/djangoblog/__pycache__/wsgi.cpython-311.pyc b/src/djangoblog/__pycache__/wsgi.cpython-311.pyc index 8d01b7f..bed74b9 100644 Binary files a/src/djangoblog/__pycache__/wsgi.cpython-311.pyc and b/src/djangoblog/__pycache__/wsgi.cpython-311.pyc differ diff --git a/src/djangoblog/plugin_manage/__pycache__/base_plugin.cpython-311.pyc b/src/djangoblog/plugin_manage/__pycache__/base_plugin.cpython-311.pyc index b8e07a6..a71c305 100644 Binary files a/src/djangoblog/plugin_manage/__pycache__/base_plugin.cpython-311.pyc and b/src/djangoblog/plugin_manage/__pycache__/base_plugin.cpython-311.pyc differ diff --git a/src/djangoblog/plugin_manage/__pycache__/hook_constants.cpython-311.pyc b/src/djangoblog/plugin_manage/__pycache__/hook_constants.cpython-311.pyc index 16df513..d7df3d0 100644 Binary files a/src/djangoblog/plugin_manage/__pycache__/hook_constants.cpython-311.pyc and b/src/djangoblog/plugin_manage/__pycache__/hook_constants.cpython-311.pyc differ diff --git a/src/djangoblog/plugin_manage/__pycache__/hooks.cpython-311.pyc b/src/djangoblog/plugin_manage/__pycache__/hooks.cpython-311.pyc index 8c8b48d..ad65b89 100644 Binary files a/src/djangoblog/plugin_manage/__pycache__/hooks.cpython-311.pyc and b/src/djangoblog/plugin_manage/__pycache__/hooks.cpython-311.pyc differ diff --git a/src/djangoblog/plugin_manage/__pycache__/loader.cpython-311.pyc b/src/djangoblog/plugin_manage/__pycache__/loader.cpython-311.pyc index ed815f2..8a03a33 100644 Binary files a/src/djangoblog/plugin_manage/__pycache__/loader.cpython-311.pyc and b/src/djangoblog/plugin_manage/__pycache__/loader.cpython-311.pyc differ diff --git a/src/docker-compose.es.yml b/src/docker-compose.es.yml new file mode 100644 index 0000000..83e35ff --- /dev/null +++ b/src/docker-compose.es.yml @@ -0,0 +1,48 @@ +version: '3' + +services: + es: + image: liangliangyy/elasticsearch-analysis-ik:8.6.1 + container_name: es + restart: always + environment: + - discovery.type=single-node + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + ports: + - 9200:9200 + volumes: + - ./bin/datas/es/:/usr/share/elasticsearch/data/ + + kibana: + image: kibana:8.6.1 + restart: always + container_name: kibana + ports: + - 5601:5601 + environment: + - ELASTICSEARCH_HOSTS=http://es:9200 + + djangoblog: + build: . + restart: always + command: bash -c 'sh /code/djangoblog/bin/docker_start.sh' + ports: + - "8000:8000" + volumes: + - ./collectedstatic:/code/djangoblog/collectedstatic + - ./uploads:/code/djangoblog/uploads + environment: + - DJANGO_MYSQL_DATABASE=djangoblog + - DJANGO_MYSQL_USER=root + - DJANGO_MYSQL_PASSWORD=DjAnGoBlOg!2!Q@W#E + - DJANGO_MYSQL_HOST=db + - DJANGO_MYSQL_PORT=3306 + - DJANGO_MEMCACHED_LOCATION=memcached:11211 + - DJANGO_ELASTICSEARCH_HOST=es:9200 + links: + - db + - memcached + depends_on: + - db + container_name: djangoblog + diff --git a/src/docker-compose.yml b/src/docker-compose.yml new file mode 100644 index 0000000..2735c32 --- /dev/null +++ b/src/docker-compose.yml @@ -0,0 +1,59 @@ +version: '3' + +services: + db: + image: mysql:latest + restart: always + environment: + - MYSQL_DATABASE=djangoblog + - MYSQL_ROOT_PASSWORD=DjAnGoBlOg!2!Q@W#E + ports: + - 3306:3306 + volumes: + - ./bin/datas/mysql/:/var/lib/mysql + depends_on: + - redis + container_name: db + + djangoblog: + build: . + restart: always + command: bash -c 'sh /code/djangoblog/bin/docker_start.sh' + ports: + - "8000:8000" + volumes: + - ./collectedstatic:/code/djangoblog/collectedstatic + - ./logs:/code/djangoblog/logs + - ./uploads:/code/djangoblog/uploads + environment: + - DJANGO_MYSQL_DATABASE=djangoblog + - DJANGO_MYSQL_USER=root + - DJANGO_MYSQL_PASSWORD=DjAnGoBlOg!2!Q@W#E + - DJANGO_MYSQL_HOST=db + - DJANGO_MYSQL_PORT=3306 + - DJANGO_REDIS_URL=redis:6379 + links: + - db + - redis + depends_on: + - db + container_name: djangoblog + nginx: + restart: always + image: nginx:latest + ports: + - "80:80" + - "443:443" + volumes: + - ./bin/nginx.conf:/etc/nginx/nginx.conf + - ./collectedstatic:/code/djangoblog/collectedstatic + links: + - djangoblog:djangoblog + container_name: nginx + + redis: + restart: always + image: redis:latest + container_name: redis + ports: + - "6379:6379" diff --git a/src/logs/djangoblog.log b/src/logs/djangoblog.log index f58c44a..4e63a66 100644 --- a/src/logs/djangoblog.log +++ b/src/logs/djangoblog.log @@ -1,119 +1,157 @@ -[2025-10-12 19:21:57,358] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:21:57,358] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:21:57,358] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:21:57,358] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:21:57,360] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:21:57,360] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:21:57,360] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:21:57,360] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:21:57,362] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:21:57,362] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:21:57,363] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:21:57,363] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:21:57,364] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:21:57,364] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:21:57,365] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:21:57,365] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:21:57,367] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:21:57,367] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:21:57,367] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:21:57,367] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:21:57,370] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:21:57,370] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:21:57,370] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:21:57,370] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:21:57,373] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:21:57,373] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:21:57,373] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:21:57,373] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:22:07,736] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:22:07,736] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:22:07,737] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:22:07,737] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:22:07,760] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:22:07,760] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:22:07,760] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:22:07,760] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:22:07,775] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:22:07,775] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:22:07,775] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:22:07,775] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:22:07,799] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:22:07,799] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:22:07,799] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:22:07,799] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:22:07,828] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:22:07,828] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:22:07,828] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:22:07,828] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:22:07,861] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:22:07,861] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:22:07,861] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:22:07,861] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:22:07,884] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:22:07,884] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:22:07,885] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:22:07,885] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:22:17,362] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:22:17,362] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:22:17,363] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:22:17,363] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:22:17,364] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:22:17,364] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:22:17,364] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:22:17,364] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:22:17,364] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:22:17,364] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:22:17,366] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:22:17,366] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:22:17,367] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:22:17,367] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:22:17,367] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:22:17,367] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:22:17,368] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:22:17,368] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:22:17,368] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:22:17,368] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:22:17,369] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:22:17,369] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:22:17,369] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:22:17,369] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:22:17,370] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:22:17,370] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:22:17,370] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:22:17,370] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:22:18,002] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:22:18,002] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. -[2025-10-12 19:22:18,003] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:22:18,003] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 -[2025-10-12 19:22:18,004] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:22:18,004] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. -[2025-10-12 19:22:18,004] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:22:18,004] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 -[2025-10-12 19:22:18,005] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:22:18,005] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. -[2025-10-12 19:22:18,005] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:22:18,005] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 -[2025-10-12 19:22:18,007] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:22:18,007] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. -[2025-10-12 19:22:18,007] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:22:18,007] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 -[2025-10-12 19:22:18,008] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:22:18,008] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. -[2025-10-12 19:22:18,008] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:22:18,008] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 -[2025-10-12 19:22:18,009] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:22:18,009] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. -[2025-10-12 19:22:18,014] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:22:18,014] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 -[2025-10-12 19:22:18,015] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:22:18,015] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. -[2025-10-12 19:22:18,016] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:22:18,016] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 -[2025-10-12 19:22:18,038] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader -[2025-10-12 19:22:21,201] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1 -[2025-10-12 19:22:21,247] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache. -[2025-10-12 19:22:21,260] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting -[2025-10-12 19:22:21,260] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting -[2025-10-12 19:22:21,716] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar -[2025-10-12 19:22:21,755] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari +[2025-10-12 21:55:48,961] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 21:55:48,961] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 21:55:48,962] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 21:55:48,962] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 21:55:48,963] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 21:55:48,963] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 21:55:48,964] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 21:55:48,964] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 21:55:48,966] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 21:55:48,966] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 21:55:48,966] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 21:55:48,966] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 21:55:48,968] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 21:55:48,968] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 21:55:48,968] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 21:55:48,968] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 21:55:48,970] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 21:55:48,970] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 21:55:48,970] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 21:55:48,970] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 21:55:48,972] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 21:55:48,972] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 21:55:48,972] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 21:55:48,972] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 21:55:48,975] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 21:55:48,975] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 21:55:48,975] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 21:55:48,975] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 21:55:49,460] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 21:55:49,460] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 21:55:49,461] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 21:55:49,461] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 21:55:49,462] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 21:55:49,462] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 21:55:49,462] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 21:55:49,462] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 21:55:49,462] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 21:55:49,462] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 21:55:49,463] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 21:55:49,463] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 21:55:49,463] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 21:55:49,463] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 21:55:49,464] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 21:55:49,464] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 21:55:49,464] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 21:55:49,464] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 21:55:49,465] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 21:55:49,465] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 21:55:49,465] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 21:55:49,465] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 21:55:49,466] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 21:55:49,466] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 21:55:49,466] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 21:55:49,466] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 21:55:49,467] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 21:55:49,467] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 21:55:49,477] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader +[2025-10-12 21:55:51,415] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1 +[2025-10-12 21:55:51,419] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache. +[2025-10-12 21:55:51,423] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting +[2025-10-12 21:55:51,423] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting +[2025-10-12 21:55:51,459] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar +[2025-10-12 21:55:51,463] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari +[2025-10-12 22:01:15,331] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1 +[2025-10-12 22:23:18,015] INFO [django.utils.autoreload.trigger_reload:265 autoreload] C:\DjangoBlog\local\DjangoBlog\accounts\admin.py changed, reloading. +[2025-10-12 22:23:18,632] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 22:23:18,632] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 22:23:18,633] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 22:23:18,633] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 22:23:18,633] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 22:23:18,633] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 22:23:18,633] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 22:23:18,633] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 22:23:18,634] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 22:23:18,634] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 22:23:18,634] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 22:23:18,634] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 22:23:18,635] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 22:23:18,635] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 22:23:18,635] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 22:23:18,635] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 22:23:18,636] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 22:23:18,636] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 22:23:18,636] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 22:23:18,636] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 22:23:18,637] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 22:23:18,637] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 22:23:18,637] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 22:23:18,637] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 22:23:18,638] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 22:23:18,638] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 22:23:18,638] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 22:23:18,638] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 22:23:18,649] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader +[2025-10-12 22:23:24,107] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 22:23:24,107] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 22:23:24,107] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 22:23:24,107] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 22:23:24,108] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 22:23:24,108] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 22:23:24,108] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 22:23:24,108] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 22:23:24,109] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 22:23:24,109] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 22:23:24,110] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 22:23:24,110] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 22:23:24,110] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 22:23:24,110] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 22:23:24,110] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 22:23:24,110] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 22:23:24,111] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 22:23:24,111] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 22:23:24,111] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 22:23:24,111] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 22:23:24,112] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 22:23:24,112] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 22:23:24,112] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 22:23:24,112] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 22:23:24,113] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 22:23:24,113] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 22:23:24,113] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 22:23:24,113] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 22:23:24,602] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 22:23:24,602] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章结尾版权声明 initialized. +[2025-10-12 22:23:24,602] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 22:23:24,602] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_copyright - 文章结尾版权声明 +[2025-10-12 22:23:24,603] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 22:23:24,603] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 阅读时间预测 initialized. +[2025-10-12 22:23:24,603] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 22:23:24,603] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: reading_time - 阅读时间预测 +[2025-10-12 22:23:24,604] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 22:23:24,604] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 外部链接处理器 initialized. +[2025-10-12 22:23:24,604] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 22:23:24,604] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: external_links - 外部链接处理器 +[2025-10-12 22:23:24,605] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 22:23:24,605] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章浏览次数统计 initialized. +[2025-10-12 22:23:24,605] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 22:23:24,605] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: view_count - 文章浏览次数统计 +[2025-10-12 22:23:24,606] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 22:23:24,606] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] SEO 优化器 initialized. +[2025-10-12 22:23:24,606] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 22:23:24,606] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: seo_optimizer - SEO 优化器 +[2025-10-12 22:23:24,606] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 22:23:24,606] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 图片性能优化插件 initialized. +[2025-10-12 22:23:24,607] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 22:23:24,607] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: image_lazy_loading - 图片性能优化插件 +[2025-10-12 22:23:24,608] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 22:23:24,608] INFO [djangoblog.plugin_manage.base_plugin.init_plugin:48 base_plugin] 文章推荐 initialized. +[2025-10-12 22:23:24,609] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 22:23:24,609] INFO [djangoblog.plugin_manage.loader.load_plugins:29 loader] Successfully loaded plugin: article_recommendation - 文章推荐 +[2025-10-12 22:23:24,619] INFO [django.utils.autoreload.run_with_reloader:667 autoreload] Watching for file changes with StatReloader +[2025-10-12 22:23:26,686] INFO [blog.views.get_queryset_from_cache:75 views] set view cache.key:index_1 +[2025-10-12 22:23:26,689] INFO [blog.context_processors.seo_processor:17 context_processors] set processor cache. +[2025-10-12 22:23:26,691] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting +[2025-10-12 22:23:26,691] INFO [djangoblog.utils.get_blog_setting:171 utils] set cache get_blog_setting +[2025-10-12 22:23:26,717] INFO [blog.templatetags.blog_tags.load_sidebar:213 blog_tags] load sidebar +[2025-10-12 22:23:26,722] INFO [blog.templatetags.blog_tags.load_sidebar:257 blog_tags] set sidebar cache.key:sidebari diff --git a/src/oauth/__pycache__/__init__.cpython-311.pyc b/src/oauth/__pycache__/__init__.cpython-311.pyc index 8fe1e0f..ea150ab 100644 Binary files a/src/oauth/__pycache__/__init__.cpython-311.pyc and b/src/oauth/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/oauth/__pycache__/admin.cpython-311.pyc b/src/oauth/__pycache__/admin.cpython-311.pyc index ecd8484..944b692 100644 Binary files a/src/oauth/__pycache__/admin.cpython-311.pyc and b/src/oauth/__pycache__/admin.cpython-311.pyc differ diff --git a/src/oauth/__pycache__/apps.cpython-311.pyc b/src/oauth/__pycache__/apps.cpython-311.pyc index 785e194..7544da2 100644 Binary files a/src/oauth/__pycache__/apps.cpython-311.pyc and b/src/oauth/__pycache__/apps.cpython-311.pyc differ diff --git a/src/oauth/__pycache__/forms.cpython-311.pyc b/src/oauth/__pycache__/forms.cpython-311.pyc index b9360c3..2765c9a 100644 Binary files a/src/oauth/__pycache__/forms.cpython-311.pyc and b/src/oauth/__pycache__/forms.cpython-311.pyc differ diff --git a/src/oauth/__pycache__/models.cpython-311.pyc b/src/oauth/__pycache__/models.cpython-311.pyc index de9d530..14be4c6 100644 Binary files a/src/oauth/__pycache__/models.cpython-311.pyc and b/src/oauth/__pycache__/models.cpython-311.pyc differ diff --git a/src/oauth/__pycache__/oauthmanager.cpython-311.pyc b/src/oauth/__pycache__/oauthmanager.cpython-311.pyc index 21d6432..e122471 100644 Binary files a/src/oauth/__pycache__/oauthmanager.cpython-311.pyc and b/src/oauth/__pycache__/oauthmanager.cpython-311.pyc differ diff --git a/src/oauth/__pycache__/urls.cpython-311.pyc b/src/oauth/__pycache__/urls.cpython-311.pyc index 06f7fe1..93f5f7b 100644 Binary files a/src/oauth/__pycache__/urls.cpython-311.pyc and b/src/oauth/__pycache__/urls.cpython-311.pyc differ diff --git a/src/oauth/__pycache__/views.cpython-311.pyc b/src/oauth/__pycache__/views.cpython-311.pyc index cebb7f0..1503f3c 100644 Binary files a/src/oauth/__pycache__/views.cpython-311.pyc and b/src/oauth/__pycache__/views.cpython-311.pyc differ diff --git a/src/oauth/migrations/__pycache__/0001_initial.cpython-311.pyc b/src/oauth/migrations/__pycache__/0001_initial.cpython-311.pyc index 794bda1..13fca2f 100644 Binary files a/src/oauth/migrations/__pycache__/0001_initial.cpython-311.pyc and b/src/oauth/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/src/oauth/migrations/__pycache__/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.cpython-311.pyc b/src/oauth/migrations/__pycache__/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.cpython-311.pyc index 638bb43..114bdd2 100644 Binary files a/src/oauth/migrations/__pycache__/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.cpython-311.pyc and b/src/oauth/migrations/__pycache__/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.cpython-311.pyc differ diff --git a/src/oauth/migrations/__pycache__/0003_alter_oauthuser_nickname.cpython-311.pyc b/src/oauth/migrations/__pycache__/0003_alter_oauthuser_nickname.cpython-311.pyc index ca9e7ad..d1b7c08 100644 Binary files a/src/oauth/migrations/__pycache__/0003_alter_oauthuser_nickname.cpython-311.pyc and b/src/oauth/migrations/__pycache__/0003_alter_oauthuser_nickname.cpython-311.pyc differ diff --git a/src/oauth/migrations/__pycache__/__init__.cpython-311.pyc b/src/oauth/migrations/__pycache__/__init__.cpython-311.pyc index e9cc2fb..7f5dc49 100644 Binary files a/src/oauth/migrations/__pycache__/__init__.cpython-311.pyc and b/src/oauth/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/oauth/templatetags/__pycache__/__init__.cpython-311.pyc b/src/oauth/templatetags/__pycache__/__init__.cpython-311.pyc index 3971d37..6d11ed2 100644 Binary files a/src/oauth/templatetags/__pycache__/__init__.cpython-311.pyc and b/src/oauth/templatetags/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/oauth/templatetags/__pycache__/oauth_tags.cpython-311.pyc b/src/oauth/templatetags/__pycache__/oauth_tags.cpython-311.pyc index a470f8a..7f2bb07 100644 Binary files a/src/oauth/templatetags/__pycache__/oauth_tags.cpython-311.pyc and b/src/oauth/templatetags/__pycache__/oauth_tags.cpython-311.pyc differ diff --git a/src/owntracks/__pycache__/__init__.cpython-311.pyc b/src/owntracks/__pycache__/__init__.cpython-311.pyc index d5b301d..fe145ca 100644 Binary files a/src/owntracks/__pycache__/__init__.cpython-311.pyc and b/src/owntracks/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/owntracks/__pycache__/admin.cpython-311.pyc b/src/owntracks/__pycache__/admin.cpython-311.pyc index 13cbd0c..a166500 100644 Binary files a/src/owntracks/__pycache__/admin.cpython-311.pyc and b/src/owntracks/__pycache__/admin.cpython-311.pyc differ diff --git a/src/owntracks/__pycache__/apps.cpython-311.pyc b/src/owntracks/__pycache__/apps.cpython-311.pyc index 1a7e2b2..d489fa2 100644 Binary files a/src/owntracks/__pycache__/apps.cpython-311.pyc and b/src/owntracks/__pycache__/apps.cpython-311.pyc differ diff --git a/src/owntracks/__pycache__/models.cpython-311.pyc b/src/owntracks/__pycache__/models.cpython-311.pyc index c509e2a..eb4a923 100644 Binary files a/src/owntracks/__pycache__/models.cpython-311.pyc and b/src/owntracks/__pycache__/models.cpython-311.pyc differ diff --git a/src/owntracks/__pycache__/urls.cpython-311.pyc b/src/owntracks/__pycache__/urls.cpython-311.pyc index 4e61507..3e667fe 100644 Binary files a/src/owntracks/__pycache__/urls.cpython-311.pyc and b/src/owntracks/__pycache__/urls.cpython-311.pyc differ diff --git a/src/owntracks/__pycache__/views.cpython-311.pyc b/src/owntracks/__pycache__/views.cpython-311.pyc index 2414efe..c1aeb6b 100644 Binary files a/src/owntracks/__pycache__/views.cpython-311.pyc and b/src/owntracks/__pycache__/views.cpython-311.pyc differ diff --git a/src/owntracks/migrations/__pycache__/0001_initial.cpython-311.pyc b/src/owntracks/migrations/__pycache__/0001_initial.cpython-311.pyc index e3ff680..57892bb 100644 Binary files a/src/owntracks/migrations/__pycache__/0001_initial.cpython-311.pyc and b/src/owntracks/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/src/owntracks/migrations/__pycache__/0002_alter_owntracklog_options_and_more.cpython-311.pyc b/src/owntracks/migrations/__pycache__/0002_alter_owntracklog_options_and_more.cpython-311.pyc index 76875aa..1fed633 100644 Binary files a/src/owntracks/migrations/__pycache__/0002_alter_owntracklog_options_and_more.cpython-311.pyc and b/src/owntracks/migrations/__pycache__/0002_alter_owntracklog_options_and_more.cpython-311.pyc differ diff --git a/src/owntracks/migrations/__pycache__/__init__.cpython-311.pyc b/src/owntracks/migrations/__pycache__/__init__.cpython-311.pyc index 00a928f..a01f9cb 100644 Binary files a/src/owntracks/migrations/__pycache__/__init__.cpython-311.pyc and b/src/owntracks/migrations/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/__pycache__/__init__.cpython-311.pyc b/src/plugins/__pycache__/__init__.cpython-311.pyc index 6c88943..9c02a78 100644 Binary files a/src/plugins/__pycache__/__init__.cpython-311.pyc and b/src/plugins/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/article_copyright/__pycache__/__init__.cpython-311.pyc b/src/plugins/article_copyright/__pycache__/__init__.cpython-311.pyc index 7fd1524..84122cb 100644 Binary files a/src/plugins/article_copyright/__pycache__/__init__.cpython-311.pyc and b/src/plugins/article_copyright/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/article_copyright/__pycache__/plugin.cpython-311.pyc b/src/plugins/article_copyright/__pycache__/plugin.cpython-311.pyc index 18e9c06..61a1311 100644 Binary files a/src/plugins/article_copyright/__pycache__/plugin.cpython-311.pyc and b/src/plugins/article_copyright/__pycache__/plugin.cpython-311.pyc differ diff --git a/src/plugins/article_recommendation/__pycache__/__init__.cpython-311.pyc b/src/plugins/article_recommendation/__pycache__/__init__.cpython-311.pyc index ddfb8d5..f9a74fe 100644 Binary files a/src/plugins/article_recommendation/__pycache__/__init__.cpython-311.pyc and b/src/plugins/article_recommendation/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/article_recommendation/__pycache__/plugin.cpython-311.pyc b/src/plugins/article_recommendation/__pycache__/plugin.cpython-311.pyc index 8643f29..c6a8c65 100644 Binary files a/src/plugins/article_recommendation/__pycache__/plugin.cpython-311.pyc and b/src/plugins/article_recommendation/__pycache__/plugin.cpython-311.pyc differ diff --git a/src/plugins/external_links/__pycache__/__init__.cpython-311.pyc b/src/plugins/external_links/__pycache__/__init__.cpython-311.pyc index 7774058..e3769bc 100644 Binary files a/src/plugins/external_links/__pycache__/__init__.cpython-311.pyc and b/src/plugins/external_links/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/external_links/__pycache__/plugin.cpython-311.pyc b/src/plugins/external_links/__pycache__/plugin.cpython-311.pyc index 24621a8..02b4df3 100644 Binary files a/src/plugins/external_links/__pycache__/plugin.cpython-311.pyc and b/src/plugins/external_links/__pycache__/plugin.cpython-311.pyc differ diff --git a/src/plugins/image_lazy_loading/__pycache__/__init__.cpython-311.pyc b/src/plugins/image_lazy_loading/__pycache__/__init__.cpython-311.pyc index 2b3b821..d64914b 100644 Binary files a/src/plugins/image_lazy_loading/__pycache__/__init__.cpython-311.pyc and b/src/plugins/image_lazy_loading/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/image_lazy_loading/__pycache__/plugin.cpython-311.pyc b/src/plugins/image_lazy_loading/__pycache__/plugin.cpython-311.pyc index cc6c705..86ecbe0 100644 Binary files a/src/plugins/image_lazy_loading/__pycache__/plugin.cpython-311.pyc and b/src/plugins/image_lazy_loading/__pycache__/plugin.cpython-311.pyc differ diff --git a/src/plugins/reading_time/__pycache__/__init__.cpython-311.pyc b/src/plugins/reading_time/__pycache__/__init__.cpython-311.pyc index d949e38..2e1851f 100644 Binary files a/src/plugins/reading_time/__pycache__/__init__.cpython-311.pyc and b/src/plugins/reading_time/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/reading_time/__pycache__/plugin.cpython-311.pyc b/src/plugins/reading_time/__pycache__/plugin.cpython-311.pyc index c369c34..fcbba00 100644 Binary files a/src/plugins/reading_time/__pycache__/plugin.cpython-311.pyc and b/src/plugins/reading_time/__pycache__/plugin.cpython-311.pyc differ diff --git a/src/plugins/seo_optimizer/__pycache__/__init__.cpython-311.pyc b/src/plugins/seo_optimizer/__pycache__/__init__.cpython-311.pyc index d5520ce..0473a47 100644 Binary files a/src/plugins/seo_optimizer/__pycache__/__init__.cpython-311.pyc and b/src/plugins/seo_optimizer/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/seo_optimizer/__pycache__/plugin.cpython-311.pyc b/src/plugins/seo_optimizer/__pycache__/plugin.cpython-311.pyc index 033a766..f793500 100644 Binary files a/src/plugins/seo_optimizer/__pycache__/plugin.cpython-311.pyc and b/src/plugins/seo_optimizer/__pycache__/plugin.cpython-311.pyc differ diff --git a/src/plugins/view_count/__pycache__/__init__.cpython-311.pyc b/src/plugins/view_count/__pycache__/__init__.cpython-311.pyc index 55e06f8..287c667 100644 Binary files a/src/plugins/view_count/__pycache__/__init__.cpython-311.pyc and b/src/plugins/view_count/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/plugins/view_count/__pycache__/plugin.cpython-311.pyc b/src/plugins/view_count/__pycache__/plugin.cpython-311.pyc index c6004a3..0a7b862 100644 Binary files a/src/plugins/view_count/__pycache__/plugin.cpython-311.pyc and b/src/plugins/view_count/__pycache__/plugin.cpython-311.pyc differ diff --git a/src/servermanager/__pycache__/MemcacheStorage.cpython-311.pyc b/src/servermanager/__pycache__/MemcacheStorage.cpython-311.pyc index 186dc67..a673789 100644 Binary files a/src/servermanager/__pycache__/MemcacheStorage.cpython-311.pyc and b/src/servermanager/__pycache__/MemcacheStorage.cpython-311.pyc differ diff --git a/src/servermanager/__pycache__/__init__.cpython-311.pyc b/src/servermanager/__pycache__/__init__.cpython-311.pyc index c2ae48a..01321cd 100644 Binary files a/src/servermanager/__pycache__/__init__.cpython-311.pyc and b/src/servermanager/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/servermanager/__pycache__/admin.cpython-311.pyc b/src/servermanager/__pycache__/admin.cpython-311.pyc index 6ab6be3..2a2c95b 100644 Binary files a/src/servermanager/__pycache__/admin.cpython-311.pyc and b/src/servermanager/__pycache__/admin.cpython-311.pyc differ diff --git a/src/servermanager/__pycache__/apps.cpython-311.pyc b/src/servermanager/__pycache__/apps.cpython-311.pyc index 8e6b49f..800626a 100644 Binary files a/src/servermanager/__pycache__/apps.cpython-311.pyc and b/src/servermanager/__pycache__/apps.cpython-311.pyc differ diff --git a/src/servermanager/__pycache__/models.cpython-311.pyc b/src/servermanager/__pycache__/models.cpython-311.pyc index f7a98bb..3d3ace9 100644 Binary files a/src/servermanager/__pycache__/models.cpython-311.pyc and b/src/servermanager/__pycache__/models.cpython-311.pyc differ diff --git a/src/servermanager/__pycache__/robot.cpython-311.pyc b/src/servermanager/__pycache__/robot.cpython-311.pyc index d553a7a..74c54e9 100644 Binary files a/src/servermanager/__pycache__/robot.cpython-311.pyc and b/src/servermanager/__pycache__/robot.cpython-311.pyc differ diff --git a/src/servermanager/__pycache__/urls.cpython-311.pyc b/src/servermanager/__pycache__/urls.cpython-311.pyc index a0b0ac1..52b2842 100644 Binary files a/src/servermanager/__pycache__/urls.cpython-311.pyc and b/src/servermanager/__pycache__/urls.cpython-311.pyc differ diff --git a/src/servermanager/api/__pycache__/__init__.cpython-311.pyc b/src/servermanager/api/__pycache__/__init__.cpython-311.pyc index f6abc9c..7626632 100644 Binary files a/src/servermanager/api/__pycache__/__init__.cpython-311.pyc and b/src/servermanager/api/__pycache__/__init__.cpython-311.pyc differ diff --git a/src/servermanager/api/__pycache__/blogapi.cpython-311.pyc b/src/servermanager/api/__pycache__/blogapi.cpython-311.pyc index 94f4e58..99e76df 100644 Binary files a/src/servermanager/api/__pycache__/blogapi.cpython-311.pyc and b/src/servermanager/api/__pycache__/blogapi.cpython-311.pyc differ diff --git a/src/servermanager/api/__pycache__/commonapi.cpython-311.pyc b/src/servermanager/api/__pycache__/commonapi.cpython-311.pyc index 53ab6a1..5129c92 100644 Binary files a/src/servermanager/api/__pycache__/commonapi.cpython-311.pyc and b/src/servermanager/api/__pycache__/commonapi.cpython-311.pyc differ diff --git a/src/servermanager/migrations/__pycache__/0001_initial.cpython-311.pyc b/src/servermanager/migrations/__pycache__/0001_initial.cpython-311.pyc index aa5b32a..82cbef5 100644 Binary files a/src/servermanager/migrations/__pycache__/0001_initial.cpython-311.pyc and b/src/servermanager/migrations/__pycache__/0001_initial.cpython-311.pyc differ diff --git a/src/servermanager/migrations/__pycache__/0002_alter_emailsendlog_options_and_more.cpython-311.pyc b/src/servermanager/migrations/__pycache__/0002_alter_emailsendlog_options_and_more.cpython-311.pyc index 7e09878..90d91e4 100644 Binary files a/src/servermanager/migrations/__pycache__/0002_alter_emailsendlog_options_and_more.cpython-311.pyc and b/src/servermanager/migrations/__pycache__/0002_alter_emailsendlog_options_and_more.cpython-311.pyc differ diff --git a/src/servermanager/migrations/__pycache__/__init__.cpython-311.pyc b/src/servermanager/migrations/__pycache__/__init__.cpython-311.pyc index 086558b..c9deb10 100644 Binary files a/src/servermanager/migrations/__pycache__/__init__.cpython-311.pyc and b/src/servermanager/migrations/__pycache__/__init__.cpython-311.pyc differ