diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..35410ca
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/djangoBlog.iml b/.idea/djangoBlog.iml
new file mode 100644
index 0000000..fcf40c7
--- /dev/null
+++ b/.idea/djangoBlog.iml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..d3144c8
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..1b8a403
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..ebbd2c7
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/Djangoblog 项目界面设计文档.docx b/doc/Djangoblog 项目界面设计文档.docx
new file mode 100644
index 0000000..c3d7d73
Binary files /dev/null and b/doc/Djangoblog 项目界面设计文档.docx differ
diff --git a/src/sql/djangoblog20251006.sql b/src/sql/djangoblog20251006.sql
new file mode 100644
index 0000000..630a9f1
--- /dev/null
+++ b/src/sql/djangoblog20251006.sql
@@ -0,0 +1,703 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : localhost_3306
+ Source Server Type : MySQL
+ Source Server Version : 80012 (8.0.12)
+ Source Host : localhost:3306
+ Source Schema : djangoblog
+
+ Target Server Type : MySQL
+ Target Server Version : 80012 (8.0.12)
+ File Encoding : 65001
+
+ Date: 06/10/2025 16:31:34
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for accounts_bloguser
+-- ----------------------------
+DROP TABLE IF EXISTS `accounts_bloguser`;
+CREATE TABLE `accounts_bloguser` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `last_login` datetime(6) NULL DEFAULT NULL,
+ `is_superuser` tinyint(1) NOT NULL,
+ `username` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `first_name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `last_name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `email` varchar(254) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `is_staff` tinyint(1) NOT NULL,
+ `is_active` tinyint(1) NOT NULL,
+ `date_joined` datetime(6) NOT NULL,
+ `nickname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `source` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `username`(`username`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of accounts_bloguser
+-- ----------------------------
+INSERT INTO `accounts_bloguser` VALUES (1, 'pbkdf2_sha256$1000000$3kPtwC1rzKfdxAdVzy2lQ0$uuacWZgCrLjG7PhxUdIUXgVkXbUUw4Y9oS+NuAlvF+c=', '2025-10-06 15:18:37.640743', 1, 'nj140', '', '', '123@abc.com', 1, 1, '2025-09-10 20:21:37.484432', '', '', '2025-09-10 20:21:37.484432', '2025-09-10 20:21:37.484432');
+INSERT INTO `accounts_bloguser` VALUES (2, 'pbkdf2_sha256$1000000$xuZYOJn74XQWCEy8PpEw41$AVgECQISFv7Fo4/DDrb8EXS4zQnN4bdTxAnDWNbuTYU=', NULL, 0, '测试用户', '', '', 'test@test.com', 0, 1, '2025-09-10 20:22:52.608486', '', '', '2025-09-10 20:22:52.608486', '2025-09-10 20:22:52.608486');
+
+-- ----------------------------
+-- Table structure for accounts_bloguser_groups
+-- ----------------------------
+DROP TABLE IF EXISTS `accounts_bloguser_groups`;
+CREATE TABLE `accounts_bloguser_groups` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `bloguser_id` bigint(20) NOT NULL,
+ `group_id` int(11) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `accounts_bloguser_groups_bloguser_id_group_id_fc37e89b_uniq`(`bloguser_id`, `group_id`) USING BTREE,
+ INDEX `accounts_bloguser_groups_bloguser_id_a16ccbb7`(`bloguser_id`) USING BTREE,
+ INDEX `accounts_bloguser_groups_group_id_98d76804`(`group_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Fixed;
+
+-- ----------------------------
+-- Records of accounts_bloguser_groups
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for accounts_bloguser_user_permissions
+-- ----------------------------
+DROP TABLE IF EXISTS `accounts_bloguser_user_permissions`;
+CREATE TABLE `accounts_bloguser_user_permissions` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `bloguser_id` bigint(20) NOT NULL,
+ `permission_id` int(11) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `accounts_bloguser_user_p_bloguser_id_permission_i_14808777_uniq`(`bloguser_id`, `permission_id`) USING BTREE,
+ INDEX `accounts_bloguser_user_permissions_bloguser_id_7e1b5742`(`bloguser_id`) USING BTREE,
+ INDEX `accounts_bloguser_user_permissions_permission_id_ae5159b9`(`permission_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Fixed;
+
+-- ----------------------------
+-- Records of accounts_bloguser_user_permissions
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for auth_group
+-- ----------------------------
+DROP TABLE IF EXISTS `auth_group`;
+CREATE TABLE `auth_group` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `name`(`name`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of auth_group
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for auth_group_permissions
+-- ----------------------------
+DROP TABLE IF EXISTS `auth_group_permissions`;
+CREATE TABLE `auth_group_permissions` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `group_id` int(11) NOT NULL,
+ `permission_id` int(11) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `auth_group_permissions_group_id_permission_id_0cd325b0_uniq`(`group_id`, `permission_id`) USING BTREE,
+ INDEX `auth_group_permissions_group_id_b120cbf9`(`group_id`) USING BTREE,
+ INDEX `auth_group_permissions_permission_id_84c5c92e`(`permission_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Fixed;
+
+-- ----------------------------
+-- Records of auth_group_permissions
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for auth_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `auth_permission`;
+CREATE TABLE `auth_permission` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `content_type_id` int(11) NOT NULL,
+ `codename` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `auth_permission_content_type_id_codename_01ab375a_uniq`(`content_type_id`, `codename`) USING BTREE,
+ INDEX `auth_permission_content_type_id_2f476e4b`(`content_type_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 77 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of auth_permission
+-- ----------------------------
+INSERT INTO `auth_permission` VALUES (1, 'Can add log entry', 1, 'add_logentry');
+INSERT INTO `auth_permission` VALUES (2, 'Can change log entry', 1, 'change_logentry');
+INSERT INTO `auth_permission` VALUES (3, 'Can delete log entry', 1, 'delete_logentry');
+INSERT INTO `auth_permission` VALUES (4, 'Can view log entry', 1, 'view_logentry');
+INSERT INTO `auth_permission` VALUES (5, 'Can add permission', 2, 'add_permission');
+INSERT INTO `auth_permission` VALUES (6, 'Can change permission', 2, 'change_permission');
+INSERT INTO `auth_permission` VALUES (7, 'Can delete permission', 2, 'delete_permission');
+INSERT INTO `auth_permission` VALUES (8, 'Can view permission', 2, 'view_permission');
+INSERT INTO `auth_permission` VALUES (9, 'Can add group', 3, 'add_group');
+INSERT INTO `auth_permission` VALUES (10, 'Can change group', 3, 'change_group');
+INSERT INTO `auth_permission` VALUES (11, 'Can delete group', 3, 'delete_group');
+INSERT INTO `auth_permission` VALUES (12, 'Can view group', 3, 'view_group');
+INSERT INTO `auth_permission` VALUES (13, 'Can add content type', 4, 'add_contenttype');
+INSERT INTO `auth_permission` VALUES (14, 'Can change content type', 4, 'change_contenttype');
+INSERT INTO `auth_permission` VALUES (15, 'Can delete content type', 4, 'delete_contenttype');
+INSERT INTO `auth_permission` VALUES (16, 'Can view content type', 4, 'view_contenttype');
+INSERT INTO `auth_permission` VALUES (17, 'Can add session', 5, 'add_session');
+INSERT INTO `auth_permission` VALUES (18, 'Can change session', 5, 'change_session');
+INSERT INTO `auth_permission` VALUES (19, 'Can delete session', 5, 'delete_session');
+INSERT INTO `auth_permission` VALUES (20, 'Can view session', 5, 'view_session');
+INSERT INTO `auth_permission` VALUES (21, 'Can add site', 6, 'add_site');
+INSERT INTO `auth_permission` VALUES (22, 'Can change site', 6, 'change_site');
+INSERT INTO `auth_permission` VALUES (23, 'Can delete site', 6, 'delete_site');
+INSERT INTO `auth_permission` VALUES (24, 'Can view site', 6, 'view_site');
+INSERT INTO `auth_permission` VALUES (25, 'Can add Website configuration', 7, 'add_blogsettings');
+INSERT INTO `auth_permission` VALUES (26, 'Can change Website configuration', 7, 'change_blogsettings');
+INSERT INTO `auth_permission` VALUES (27, 'Can delete Website configuration', 7, 'delete_blogsettings');
+INSERT INTO `auth_permission` VALUES (28, 'Can view Website configuration', 7, 'view_blogsettings');
+INSERT INTO `auth_permission` VALUES (29, 'Can add link', 8, 'add_links');
+INSERT INTO `auth_permission` VALUES (30, 'Can change link', 8, 'change_links');
+INSERT INTO `auth_permission` VALUES (31, 'Can delete link', 8, 'delete_links');
+INSERT INTO `auth_permission` VALUES (32, 'Can view link', 8, 'view_links');
+INSERT INTO `auth_permission` VALUES (33, 'Can add sidebar', 9, 'add_sidebar');
+INSERT INTO `auth_permission` VALUES (34, 'Can change sidebar', 9, 'change_sidebar');
+INSERT INTO `auth_permission` VALUES (35, 'Can delete sidebar', 9, 'delete_sidebar');
+INSERT INTO `auth_permission` VALUES (36, 'Can view sidebar', 9, 'view_sidebar');
+INSERT INTO `auth_permission` VALUES (37, 'Can add tag', 10, 'add_tag');
+INSERT INTO `auth_permission` VALUES (38, 'Can change tag', 10, 'change_tag');
+INSERT INTO `auth_permission` VALUES (39, 'Can delete tag', 10, 'delete_tag');
+INSERT INTO `auth_permission` VALUES (40, 'Can view tag', 10, 'view_tag');
+INSERT INTO `auth_permission` VALUES (41, 'Can add category', 11, 'add_category');
+INSERT INTO `auth_permission` VALUES (42, 'Can change category', 11, 'change_category');
+INSERT INTO `auth_permission` VALUES (43, 'Can delete category', 11, 'delete_category');
+INSERT INTO `auth_permission` VALUES (44, 'Can view category', 11, 'view_category');
+INSERT INTO `auth_permission` VALUES (45, 'Can add article', 12, 'add_article');
+INSERT INTO `auth_permission` VALUES (46, 'Can change article', 12, 'change_article');
+INSERT INTO `auth_permission` VALUES (47, 'Can delete article', 12, 'delete_article');
+INSERT INTO `auth_permission` VALUES (48, 'Can view article', 12, 'view_article');
+INSERT INTO `auth_permission` VALUES (49, 'Can add user', 13, 'add_bloguser');
+INSERT INTO `auth_permission` VALUES (50, 'Can change user', 13, 'change_bloguser');
+INSERT INTO `auth_permission` VALUES (51, 'Can delete user', 13, 'delete_bloguser');
+INSERT INTO `auth_permission` VALUES (52, 'Can view user', 13, 'view_bloguser');
+INSERT INTO `auth_permission` VALUES (53, 'Can add comment', 14, 'add_comment');
+INSERT INTO `auth_permission` VALUES (54, 'Can change comment', 14, 'change_comment');
+INSERT INTO `auth_permission` VALUES (55, 'Can delete comment', 14, 'delete_comment');
+INSERT INTO `auth_permission` VALUES (56, 'Can view comment', 14, 'view_comment');
+INSERT INTO `auth_permission` VALUES (57, 'Can add oauth配置', 15, 'add_oauthconfig');
+INSERT INTO `auth_permission` VALUES (58, 'Can change oauth配置', 15, 'change_oauthconfig');
+INSERT INTO `auth_permission` VALUES (59, 'Can delete oauth配置', 15, 'delete_oauthconfig');
+INSERT INTO `auth_permission` VALUES (60, 'Can view oauth配置', 15, 'view_oauthconfig');
+INSERT INTO `auth_permission` VALUES (61, 'Can add oauth user', 16, 'add_oauthuser');
+INSERT INTO `auth_permission` VALUES (62, 'Can change oauth user', 16, 'change_oauthuser');
+INSERT INTO `auth_permission` VALUES (63, 'Can delete oauth user', 16, 'delete_oauthuser');
+INSERT INTO `auth_permission` VALUES (64, 'Can view oauth user', 16, 'view_oauthuser');
+INSERT INTO `auth_permission` VALUES (65, 'Can add 命令', 17, 'add_commands');
+INSERT INTO `auth_permission` VALUES (66, 'Can change 命令', 17, 'change_commands');
+INSERT INTO `auth_permission` VALUES (67, 'Can delete 命令', 17, 'delete_commands');
+INSERT INTO `auth_permission` VALUES (68, 'Can view 命令', 17, 'view_commands');
+INSERT INTO `auth_permission` VALUES (69, 'Can add 邮件发送log', 18, 'add_emailsendlog');
+INSERT INTO `auth_permission` VALUES (70, 'Can change 邮件发送log', 18, 'change_emailsendlog');
+INSERT INTO `auth_permission` VALUES (71, 'Can delete 邮件发送log', 18, 'delete_emailsendlog');
+INSERT INTO `auth_permission` VALUES (72, 'Can view 邮件发送log', 18, 'view_emailsendlog');
+INSERT INTO `auth_permission` VALUES (73, 'Can add OwnTrackLogs', 19, 'add_owntracklog');
+INSERT INTO `auth_permission` VALUES (74, 'Can change OwnTrackLogs', 19, 'change_owntracklog');
+INSERT INTO `auth_permission` VALUES (75, 'Can delete OwnTrackLogs', 19, 'delete_owntracklog');
+INSERT INTO `auth_permission` VALUES (76, 'Can view OwnTrackLogs', 19, 'view_owntracklog');
+
+-- ----------------------------
+-- Table structure for blog_article
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_article`;
+CREATE TABLE `blog_article` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `body` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `pub_time` datetime(6) NOT NULL,
+ `status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `comment_status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `type` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `views` int(10) UNSIGNED NOT NULL,
+ `article_order` int(11) NOT NULL,
+ `show_toc` tinyint(1) NOT NULL,
+ `author_id` bigint(20) NOT NULL,
+ `category_id` int(11) NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `title`(`title`) USING BTREE,
+ INDEX `blog_article_author_id_905add38`(`author_id`) USING BTREE,
+ INDEX `blog_article_category_id_7e38f15e`(`category_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of blog_article
+-- ----------------------------
+INSERT INTO `blog_article` VALUES (1, '利用 Django REST Framework 快速搭建一个AI绘画的API接口', '在这篇详细的教程中,我们将一步步学习如何结合强大的Django REST Framework和AI绘画模型,构建一个高性能、可扩展的API服务。内容涵盖环境搭建、模型封装、API视图编写以及安全认证。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 164, 0, 1, 1, 1, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (2, 'AIGC 革命:我是如何用 LangChain 连接 GPT-4 构建自动化内容生成系统的', '探索AIGC的无限可能!本文将分享一个完整的项目实战案例,介绍如何使用LangChain作为粘合剂,将大语言模型(如GPT-4)的能力与外部数据源和工具结合,实现一个强大的自动化内容创作与摘要系统。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 235, 0, 1, 1, 3, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (3, '从零到一:Docker 化 Django 项目的保姆级教程', '容器化是现代应用部署的基石。本文将以这个Django Blog项目为例,从编写Dockerfile到使用docker-compose编排服务,手把手教你如何将一个Django应用及其依赖(如MySQL, Redis)进行Docker化,实现一键部署。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 302, 0, 1, 1, 4, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (4, 'React Hooks 全方位解析:从 useState 到自定义 Hooks', '你真的理解React Hooks吗?本文将深入剖析Hooks的工作原理,不仅会详细讲解useState、useEffect等常用Hooks的最佳实践,还会带你编写一个实用的自定义Hook,彻底提升你的React开发水平。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 189, 0, 1, 2, 2, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (5, '万字长文:深入浅出Kubernetes核心概念', 'Kubernetes(K8s)是云原生时代的操作系统,但其学习曲线也相对陡峭。本文旨在用最通俗易懂的语言,为你系统性地讲解Pod、Service、Deployment、StatefulSet等核心概念,为你掌握K8s打下坚实的基础。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 512, 0, 1, 1, 4, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (6, 'MySQL索引优化艺术:从B+树到高性能SQL查询', '一个慢查询足以拖垮整个应用。本文将从MySQL索引的底层数据结构B+树讲起,深入分析如何创建高效的索引、避免索引失效的常见“坑”,并提供一套切实可行的SQL性能优化方案。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 421, 0, 1, 1, 1, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (7, 'Vue 3 对比 React 18:2025年的前端框架之争', '前端框架选型是每个项目开始时的重要决策。本文将从性能(Composition API vs Hooks)、生态、社区支持以及开发体验等多个维度,对当今最主流的两大框架Vue 3和React 18进行一次全面的横向评测。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 632, 0, 0, 2, 2, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (8, '实战指南:使用LoRA技术微调你自己的大语言模型', '想让大模型更懂你的业务?微调是关键。本文将提供一份详细的实战指南,教你如何使用高效的LoRA(Low-Rank Adaptation)技术,在消费级显卡上对开源大语言模型(如Llama 2)进行微调,打造专属的AI助手。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 398, 0, 1, 1, 3, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (9, '使用 GitHub Actions 为你的 Python 项目打造一条优雅的 CI/CD 流水线', '自动化是提升软件质量和交付效率的核心。本文将通过一个真实的Python项目案例,展示如何利用GitHub Actions,实现从代码提交、自动化测试、构建Docker镜像到部署的全流程CI/CD自动化。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 277, 0, 1, 2, 4, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+INSERT INTO `blog_article` VALUES (10, '技术人如何打破职业瓶颈?我的三点思考', '当工作了3-5年后,很多技术同学会感到迷茫。本文不谈具体的代码,只结合我个人的经历,分享关于技术深度、业务理解和软技能三个方面的思考,希望能帮助你找到突破职业瓶颈的方向。', '2025-10-06 14:38:45.000000', 'p', 'o', 'a', 712, 0, 0, 1, 7, '2025-10-06 14:38:45.000000', '2025-10-06 14:38:45.000000');
+
+-- ----------------------------
+-- Table structure for blog_article_tags
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_article_tags`;
+CREATE TABLE `blog_article_tags` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `article_id` int(11) NOT NULL,
+ `tag_id` int(11) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `blog_article_tags_article_id_tag_id_b78a22e9_uniq`(`article_id`, `tag_id`) USING BTREE,
+ INDEX `blog_article_tags_article_id_82c02dd6`(`article_id`) USING BTREE,
+ INDEX `blog_article_tags_tag_id_88eb3ed9`(`tag_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 31 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Fixed;
+
+-- ----------------------------
+-- Records of blog_article_tags
+-- ----------------------------
+INSERT INTO `blog_article_tags` VALUES (1, 1, 1);
+INSERT INTO `blog_article_tags` VALUES (2, 1, 2);
+INSERT INTO `blog_article_tags` VALUES (3, 1, 3);
+INSERT INTO `blog_article_tags` VALUES (4, 1, 8);
+INSERT INTO `blog_article_tags` VALUES (5, 1, 10);
+INSERT INTO `blog_article_tags` VALUES (6, 2, 1);
+INSERT INTO `blog_article_tags` VALUES (7, 2, 3);
+INSERT INTO `blog_article_tags` VALUES (8, 2, 9);
+INSERT INTO `blog_article_tags` VALUES (9, 3, 1);
+INSERT INTO `blog_article_tags` VALUES (10, 3, 2);
+INSERT INTO `blog_article_tags` VALUES (11, 3, 4);
+INSERT INTO `blog_article_tags` VALUES (12, 3, 10);
+INSERT INTO `blog_article_tags` VALUES (13, 3, 12);
+INSERT INTO `blog_article_tags` VALUES (14, 4, 6);
+INSERT INTO `blog_article_tags` VALUES (15, 4, 10);
+INSERT INTO `blog_article_tags` VALUES (16, 5, 4);
+INSERT INTO `blog_article_tags` VALUES (17, 5, 5);
+INSERT INTO `blog_article_tags` VALUES (18, 5, 11);
+INSERT INTO `blog_article_tags` VALUES (19, 6, 13);
+INSERT INTO `blog_article_tags` VALUES (20, 6, 10);
+INSERT INTO `blog_article_tags` VALUES (21, 7, 6);
+INSERT INTO `blog_article_tags` VALUES (22, 7, 7);
+INSERT INTO `blog_article_tags` VALUES (23, 8, 1);
+INSERT INTO `blog_article_tags` VALUES (24, 8, 3);
+INSERT INTO `blog_article_tags` VALUES (25, 8, 9);
+INSERT INTO `blog_article_tags` VALUES (26, 8, 10);
+INSERT INTO `blog_article_tags` VALUES (27, 9, 1);
+INSERT INTO `blog_article_tags` VALUES (28, 9, 4);
+INSERT INTO `blog_article_tags` VALUES (29, 9, 10);
+INSERT INTO `blog_article_tags` VALUES (30, 10, 14);
+
+-- ----------------------------
+-- Table structure for blog_blogsettings
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_blogsettings`;
+CREATE TABLE `blog_blogsettings` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `site_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `site_description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `site_seo_description` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `site_keywords` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `article_sub_length` int(11) NOT NULL,
+ `sidebar_article_count` int(11) NOT NULL,
+ `sidebar_comment_count` int(11) NOT NULL,
+ `article_comment_count` int(11) NOT NULL,
+ `show_google_adsense` tinyint(1) NOT NULL,
+ `google_adsense_codes` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
+ `open_site_comment` tinyint(1) NOT NULL,
+ `beian_code` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
+ `analytics_code` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `show_gongan_code` tinyint(1) NOT NULL,
+ `gongan_beiancode` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
+ `global_footer` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
+ `global_header` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
+ `comment_need_review` tinyint(1) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of blog_blogsettings
+-- ----------------------------
+INSERT INTO `blog_blogsettings` VALUES (1, 'djangoblog', '基于Django的博客系统', '基于Django的博客系统', 'Django,Python', 300, 10, 5, 5, 0, '', 1, '', '', 0, '', '', '', 0);
+
+-- ----------------------------
+-- Table structure for blog_category
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_category`;
+CREATE TABLE `blog_category` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `slug` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `index` int(11) NOT NULL,
+ `parent_category_id` int(11) NULL DEFAULT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `name`(`name`) USING BTREE,
+ INDEX `blog_category_slug_92643dc5`(`slug`) USING BTREE,
+ INDEX `blog_category_parent_category_id_f50c3c0c`(`parent_category_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of blog_category
+-- ----------------------------
+INSERT INTO `blog_category` VALUES (1, '后端开发', 'backend-development', 10, NULL, '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_category` VALUES (2, '前端技术', 'frontend-technology', 20, NULL, '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_category` VALUES (3, 'AI 与机器学习', 'ai-machine-learning', 30, NULL, '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_category` VALUES (4, '云原生与DevOps', 'cloud-native-devops', 40, NULL, '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_category` VALUES (5, '项目实战', 'project-showcase', 50, NULL, '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_category` VALUES (6, '技术视野', 'tech-horizon', 60, NULL, '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_category` VALUES (7, '职业发展', 'career-development', 70, NULL, '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+
+-- ----------------------------
+-- Table structure for blog_links
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_links`;
+CREATE TABLE `blog_links` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `link` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `sequence` int(11) NOT NULL,
+ `is_enable` tinyint(1) NOT NULL,
+ `show_type` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `last_mod_time` datetime(6) NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `name`(`name`) USING BTREE,
+ UNIQUE INDEX `sequence`(`sequence`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of blog_links
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for blog_sidebar
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_sidebar`;
+CREATE TABLE `blog_sidebar` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `sequence` int(11) NOT NULL,
+ `is_enable` tinyint(1) NOT NULL,
+ `last_mod_time` datetime(6) NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `sequence`(`sequence`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of blog_sidebar
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for blog_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_tag`;
+CREATE TABLE `blog_tag` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `slug` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `name`(`name`) USING BTREE,
+ INDEX `blog_tag_slug_01068d0e`(`slug`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of blog_tag
+-- ----------------------------
+INSERT INTO `blog_tag` VALUES (1, 'Python', 'python', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (2, 'Django', 'django', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (3, 'AIGC', 'aigc', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (4, 'Docker', 'docker', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (5, 'Kubernetes', 'kubernetes', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (6, 'React', 'react', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (7, 'Vue.js', 'vuejs', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (8, 'RESTful API', 'restful-api', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (9, 'LLM', 'llm', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (10, '教程', 'tutorial', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (11, '源码分析', 'source-code-analysis', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (12, '踩坑记录', 'troubleshooting', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (13, '性能优化', 'performance-optimization', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+INSERT INTO `blog_tag` VALUES (14, '面试', 'interview', '2025-10-06 14:33:33.000000', '2025-10-06 14:33:33.000000');
+
+-- ----------------------------
+-- Table structure for comments_comment
+-- ----------------------------
+DROP TABLE IF EXISTS `comments_comment`;
+CREATE TABLE `comments_comment` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `body` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `is_enable` tinyint(1) NOT NULL,
+ `article_id` int(11) NOT NULL,
+ `author_id` bigint(20) NOT NULL,
+ `parent_comment_id` bigint(20) NULL DEFAULT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `comments_comment_article_id_94fe60a2`(`article_id`) USING BTREE,
+ INDEX `comments_comment_author_id_334ce9e2`(`author_id`) USING BTREE,
+ INDEX `comments_comment_parent_comment_id_71289d4a`(`parent_comment_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of comments_comment
+-- ----------------------------
+INSERT INTO `comments_comment` VALUES (1, '测试评论1', 1, 1, 1, NULL, '2025-10-06 16:26:04.268649', '2025-10-06 16:26:04.268649');
+
+-- ----------------------------
+-- Table structure for django_admin_log
+-- ----------------------------
+DROP TABLE IF EXISTS `django_admin_log`;
+CREATE TABLE `django_admin_log` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `action_time` datetime(6) NOT NULL,
+ `object_id` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
+ `object_repr` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `action_flag` smallint(5) UNSIGNED NOT NULL,
+ `change_message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `content_type_id` int(11) NULL DEFAULT NULL,
+ `user_id` bigint(20) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `django_admin_log_content_type_id_c4bce8eb`(`content_type_id`) USING BTREE,
+ INDEX `django_admin_log_user_id_c564eba6`(`user_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of django_admin_log
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for django_content_type
+-- ----------------------------
+DROP TABLE IF EXISTS `django_content_type`;
+CREATE TABLE `django_content_type` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `app_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `model` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `django_content_type_app_label_model_76bd3d3b_uniq`(`app_label`, `model`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 20 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of django_content_type
+-- ----------------------------
+INSERT INTO `django_content_type` VALUES (1, 'admin', 'logentry');
+INSERT INTO `django_content_type` VALUES (2, 'auth', 'permission');
+INSERT INTO `django_content_type` VALUES (3, 'auth', 'group');
+INSERT INTO `django_content_type` VALUES (4, 'contenttypes', 'contenttype');
+INSERT INTO `django_content_type` VALUES (5, 'sessions', 'session');
+INSERT INTO `django_content_type` VALUES (6, 'sites', 'site');
+INSERT INTO `django_content_type` VALUES (7, 'blog', 'blogsettings');
+INSERT INTO `django_content_type` VALUES (8, 'blog', 'links');
+INSERT INTO `django_content_type` VALUES (9, 'blog', 'sidebar');
+INSERT INTO `django_content_type` VALUES (10, 'blog', 'tag');
+INSERT INTO `django_content_type` VALUES (11, 'blog', 'category');
+INSERT INTO `django_content_type` VALUES (12, 'blog', 'article');
+INSERT INTO `django_content_type` VALUES (13, 'accounts', 'bloguser');
+INSERT INTO `django_content_type` VALUES (14, 'comments', 'comment');
+INSERT INTO `django_content_type` VALUES (15, 'oauth', 'oauthconfig');
+INSERT INTO `django_content_type` VALUES (16, 'oauth', 'oauthuser');
+INSERT INTO `django_content_type` VALUES (17, 'servermanager', 'commands');
+INSERT INTO `django_content_type` VALUES (18, 'servermanager', 'emailsendlog');
+INSERT INTO `django_content_type` VALUES (19, 'owntracks', 'owntracklog');
+
+-- ----------------------------
+-- Table structure for django_migrations
+-- ----------------------------
+DROP TABLE IF EXISTS `django_migrations`;
+CREATE TABLE `django_migrations` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `applied` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 39 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of django_migrations
+-- ----------------------------
+INSERT INTO `django_migrations` VALUES (1, 'contenttypes', '0001_initial', '2025-09-10 20:20:07.085024');
+INSERT INTO `django_migrations` VALUES (2, 'contenttypes', '0002_remove_content_type_name', '2025-09-10 20:20:07.268580');
+INSERT INTO `django_migrations` VALUES (3, 'auth', '0001_initial', '2025-09-10 20:20:07.843315');
+INSERT INTO `django_migrations` VALUES (4, 'auth', '0002_alter_permission_name_max_length', '2025-09-10 20:20:07.922870');
+INSERT INTO `django_migrations` VALUES (5, 'auth', '0003_alter_user_email_max_length', '2025-09-10 20:20:07.930740');
+INSERT INTO `django_migrations` VALUES (6, 'auth', '0004_alter_user_username_opts', '2025-09-10 20:20:07.938564');
+INSERT INTO `django_migrations` VALUES (7, 'auth', '0005_alter_user_last_login_null', '2025-09-10 20:20:07.946608');
+INSERT INTO `django_migrations` VALUES (8, 'auth', '0006_require_contenttypes_0002', '2025-09-10 20:20:07.950609');
+INSERT INTO `django_migrations` VALUES (9, 'auth', '0007_alter_validators_add_error_messages', '2025-09-10 20:20:07.958108');
+INSERT INTO `django_migrations` VALUES (10, 'auth', '0008_alter_user_username_max_length', '2025-09-10 20:20:07.966887');
+INSERT INTO `django_migrations` VALUES (11, 'auth', '0009_alter_user_last_name_max_length', '2025-09-10 20:20:07.975361');
+INSERT INTO `django_migrations` VALUES (12, 'auth', '0010_alter_group_name_max_length', '2025-09-10 20:20:08.045732');
+INSERT INTO `django_migrations` VALUES (13, 'auth', '0011_update_proxy_permissions', '2025-09-10 20:20:08.060302');
+INSERT INTO `django_migrations` VALUES (14, 'auth', '0012_alter_user_first_name_max_length', '2025-09-10 20:20:08.067708');
+INSERT INTO `django_migrations` VALUES (15, 'accounts', '0001_initial', '2025-09-10 20:20:08.762715');
+INSERT INTO `django_migrations` VALUES (16, 'accounts', '0002_alter_bloguser_options_remove_bloguser_created_time_and_more', '2025-09-10 20:20:09.150861');
+INSERT INTO `django_migrations` VALUES (17, 'admin', '0001_initial', '2025-09-10 20:20:09.449364');
+INSERT INTO `django_migrations` VALUES (18, 'admin', '0002_logentry_remove_auto_add', '2025-09-10 20:20:09.461312');
+INSERT INTO `django_migrations` VALUES (19, 'admin', '0003_logentry_add_action_flag_choices', '2025-09-10 20:20:09.473800');
+INSERT INTO `django_migrations` VALUES (20, 'blog', '0001_initial', '2025-09-10 20:20:10.518659');
+INSERT INTO `django_migrations` VALUES (21, 'blog', '0002_blogsettings_global_footer_and_more', '2025-09-10 20:20:10.677950');
+INSERT INTO `django_migrations` VALUES (22, 'blog', '0003_blogsettings_comment_need_review', '2025-09-10 20:20:10.783562');
+INSERT INTO `django_migrations` VALUES (23, 'blog', '0004_rename_analyticscode_blogsettings_analytics_code_and_more', '2025-09-10 20:20:10.925352');
+INSERT INTO `django_migrations` VALUES (24, 'blog', '0005_alter_article_options_alter_category_options_and_more', '2025-09-10 20:20:12.580539');
+INSERT INTO `django_migrations` VALUES (25, 'blog', '0006_alter_blogsettings_options', '2025-09-10 20:20:12.585647');
+INSERT INTO `django_migrations` VALUES (26, 'comments', '0001_initial', '2025-09-10 20:20:13.046889');
+INSERT INTO `django_migrations` VALUES (27, 'comments', '0002_alter_comment_is_enable', '2025-09-10 20:20:13.066293');
+INSERT INTO `django_migrations` VALUES (28, 'comments', '0003_alter_comment_options_remove_comment_created_time_and_more', '2025-09-10 20:20:13.491196');
+INSERT INTO `django_migrations` VALUES (29, 'oauth', '0001_initial', '2025-09-10 20:20:13.687683');
+INSERT INTO `django_migrations` VALUES (30, 'oauth', '0002_alter_oauthconfig_options_alter_oauthuser_options_and_more', '2025-09-10 20:20:14.417907');
+INSERT INTO `django_migrations` VALUES (31, 'oauth', '0003_alter_oauthuser_nickname', '2025-09-10 20:20:14.430922');
+INSERT INTO `django_migrations` VALUES (32, 'owntracks', '0001_initial', '2025-09-10 20:20:14.459566');
+INSERT INTO `django_migrations` VALUES (33, 'owntracks', '0002_alter_owntracklog_options_and_more', '2025-09-10 20:20:14.503653');
+INSERT INTO `django_migrations` VALUES (34, 'servermanager', '0001_initial', '2025-09-10 20:20:14.537011');
+INSERT INTO `django_migrations` VALUES (35, 'servermanager', '0002_alter_emailsendlog_options_and_more', '2025-09-10 20:20:14.645874');
+INSERT INTO `django_migrations` VALUES (36, 'sessions', '0001_initial', '2025-09-10 20:20:14.731431');
+INSERT INTO `django_migrations` VALUES (37, 'sites', '0001_initial', '2025-09-10 20:20:14.756967');
+INSERT INTO `django_migrations` VALUES (38, 'sites', '0002_alter_domain_unique', '2025-09-10 20:20:14.830247');
+
+-- ----------------------------
+-- Table structure for django_session
+-- ----------------------------
+DROP TABLE IF EXISTS `django_session`;
+CREATE TABLE `django_session` (
+ `session_key` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `session_data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `expire_date` datetime(6) NOT NULL,
+ PRIMARY KEY (`session_key`) USING BTREE,
+ INDEX `django_session_expire_date_a5c62663`(`expire_date`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of django_session
+-- ----------------------------
+INSERT INTO `django_session` VALUES ('u4mo4etzwlqd5laueuj6b06atv3b8i8n', '.eJxVjL0KwjAYAN8ls0jT_DTpKDiKk3P4ki-xwTaRpgVFfHdbUdD1jrsHMTBPnZmLH01E0hJKNr_Mgrv4tApwLs9pKts37_M5pq_d7geI_XE8LSbB4A8Zfb_7lH-7Dkq3vLjlWohGo7Kce4VaURkEdbTmCuvgqsDQWQaKNRyD0h4EtdZVKDljtOHrtPhSYk7G365xvJO2lrUUsnq-AIZTRiI:1v5fUT:CRCJlZbSR39TRBJHWUmdtH5-g92-SRMQcWal9xpEqvk', '2025-11-06 00:54:37.862680');
+
+-- ----------------------------
+-- Table structure for django_site
+-- ----------------------------
+DROP TABLE IF EXISTS `django_site`;
+CREATE TABLE `django_site` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `domain` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ UNIQUE INDEX `django_site_domain_a2e37b91_uniq`(`domain`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of django_site
+-- ----------------------------
+INSERT INTO `django_site` VALUES (1, 'example.com', 'example.com');
+
+-- ----------------------------
+-- Table structure for oauth_oauthconfig
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_oauthconfig`;
+CREATE TABLE `oauth_oauthconfig` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `appkey` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `appsecret` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `callback_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `is_enable` tinyint(1) NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of oauth_oauthconfig
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for oauth_oauthuser
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_oauthuser`;
+CREATE TABLE `oauth_oauthuser` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `token` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
+ `picture` varchar(350) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
+ `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
+ `metadata` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
+ `author_id` bigint(20) NULL DEFAULT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `oauth_oauthuser_author_id_a975bef0`(`author_id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of oauth_oauthuser
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for owntracks_owntracklog
+-- ----------------------------
+DROP TABLE IF EXISTS `owntracks_owntracklog`;
+CREATE TABLE `owntracks_owntracklog` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `tid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `lat` double NOT NULL,
+ `lon` double NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of owntracks_owntracklog
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for servermanager_commands
+-- ----------------------------
+DROP TABLE IF EXISTS `servermanager_commands`;
+CREATE TABLE `servermanager_commands` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `title` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `command` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `describe` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ `last_modify_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of servermanager_commands
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for servermanager_emailsendlog
+-- ----------------------------
+DROP TABLE IF EXISTS `servermanager_emailsendlog`;
+CREATE TABLE `servermanager_emailsendlog` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `emailto` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `title` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `send_result` tinyint(1) NOT NULL,
+ `creation_time` datetime(6) NOT NULL,
+ PRIMARY KEY (`id`) USING BTREE
+) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of servermanager_emailsendlog
+-- ----------------------------
+INSERT INTO `servermanager_emailsendlog` VALUES (1, '123@abc.com', '感谢你的评论', '
非常感谢您对此网站的评论
\n 您可以访问利用 Django REST Framework 快速搭建一个AI绘画的API接口\n查看您的评论,\n再次感谢您!\n
\n 如果上面的链接打不开,请复制此链接链接到您的浏览器。\nhttps://example.com/article/2025/10/6/1.html', 0, '2025-10-06 16:26:05.979770');
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/src/templates/blog/article_detail.html b/src/templates/blog/article_detail.html
index a74a0db..50c5965 100644
--- a/src/templates/blog/article_detail.html
+++ b/src/templates/blog/article_detail.html
@@ -2,51 +2,75 @@
{% load blog_tags %}
{% block header %}
+
+ {{ article.title }} - {{ SITE_NAME }}
+
{% endblock %}
+
{% block content %}
+
+
+
{% load_article_detail article False user %}
+
{% if article.type == 'a' %}
+
+
+ {% if next_article %}
+
+ {% endif %}
+
{% endif %}
-
- {% if article.comment_status == "o" and OPEN_SITE_COMMENT %}
+
+
+ {% if article.comment_status == "o" and OPEN_SITE_COMMENT %}
+
+
{% endif %}
-
+
{% endblock %}
{% block sidebar %}
+
{% load_sidebar user "p" %}
{% endblock %}
\ No newline at end of file
diff --git a/src/templates/blog/article_index.html b/src/templates/blog/article_index.html
index 0ee6150..3a347cd 100644
--- a/src/templates/blog/article_index.html
+++ b/src/templates/blog/article_index.html
@@ -1,42 +1,35 @@
{% extends 'share_layout/base.html' %}
{% load blog_tags %}
-{% load cache %}
-{% block header %}
- {% if tag_name %}
- {{ page_type }}:{{ tag_name }} | {{ SITE_DESCRIPTION }}
- {% comment %}{% endcomment %}
- {% else %}
- {{ SITE_NAME }} | {{ SITE_DESCRIPTION }}
- {% endif %}
-
-
-
-
-
-
-
-{% endblock %}
+
{% block content %}
+
+
+
{% if page_type and tag_name %}
+
{{ page_type }}:{{ tag_name }}
+
{% endif %}
+
{% for article in article_list %}
{% load_article_detail article True user %}
+ {% empty %}
+
该分类下还没有文章哦。
{% endfor %}
+
+
{% if is_paginated %}
{% load_pagination_info page_obj page_type tag_name %}
-
{% endif %}
-
-
+
+
{% endblock %}
+
{% block sidebar %}
+
{% load_sidebar user linktype %}
{% endblock %}
\ No newline at end of file
diff --git a/src/templates/share_layout/base.html b/src/templates/share_layout/base.html
index 75d0df5..d5f523f 100644
--- a/src/templates/share_layout/base.html
+++ b/src/templates/share_layout/base.html
@@ -1,123 +1,85 @@
{% load static %}
-{% load cache %}
-{% load i18n %}
{% load compress %}
+{% load i18n %}
+{% load blog_tags %}
+
-
-
-
-
-
+
-
+
+
{% block header %}
- {% block title %}{{ SITE_NAME }}{% endblock %}
-
+ {% block title %}{{ SITE_NAME }}{% endblock %} - {{ SITE_DESCRIPTION }}
+
{% endblock %}
- {% load blog_tags %}
+
{% head_meta %}
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
{% compress css %}
+
+
-
-
- {% comment %}{% endcomment %}
-
+
- {% block compress_css %}
- {% endblock %}
+
+ {% block compress_css %}{% endblock %}
{% endcompress %}
- {% if GLOBAL_HEADER %}
- {{ GLOBAL_HEADER|safe }}
- {% endif %}
+
+ {% if GLOBAL_HEADER %}{{ GLOBAL_HEADER|safe }}{% endif %}
-
-
+
+
+
+
+
+
+
+ {% block content %}{% endblock %}
+ {% block sidebar %}{% endblock %}
+
- {% block content %}
- {% endblock %}
-
-
- {% block sidebar %}
- {% endblock %}
-
-
-
+
{% include 'share_layout/footer.html' %}
-
+
+
+
+{% compress js %}
+
+
+
+ {% block compress_js %}{% endblock %}
+{% endcompress %}
+
+{% block footer %}{% endblock %}
-
-
+
\ No newline at end of file
diff --git a/src/templates/share_layout/footer.html b/src/templates/share_layout/footer.html
index cd86a29..e0925cd 100644
--- a/src/templates/share_layout/footer.html
+++ b/src/templates/share_layout/footer.html
@@ -1,56 +1,20 @@
您还没有登录,请您登录后发表评论。 -
+ + {% include 'comments/tags/comment_list.html' %} + + {% if user.is_authenticated %} + + {% include 'comments/tags/post_comment.html' %} + {% else %} + +您还没有登录,请您登录后发表评论。
{% load oauth_tags %} {% load_oauth_applications request %} - -