From f68f310bc032a18d0b6d9a7bdbfac5f57559497a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=81=A5=E9=B9=8F?= <3331425936@qq.com> Date: Sun, 9 Nov 2025 16:38:21 +0800 Subject: [PATCH 1/3] =?UTF-8?q?zjp=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/blog/urls.py | 116 ++++++++++++------ 1 file changed, 78 insertions(+), 38 deletions(-) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py index adf2703..5c02d42 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py @@ -1,62 +1,102 @@ +# zjp: 博客应用URL配置模块 +# zjp: 定义博客系统的所有URL路由和视图映射 + from django.urls import path from django.views.decorators.cache import cache_page from . import views -app_name = "blog" +app_name = "blog" # zjp: 定义应用命名空间,用于URL反向解析 + urlpatterns = [ + # zjp: 首页 - 显示文章列表 path( r'', - views.IndexView.as_view(), - name='index'), + views.IndexView.as_view(), # zjp: 使用类视图处理首页请求 + name='index' + ), + + # zjp: 首页分页 - 显示指定页码的文章列表 path( - r'page//', - views.IndexView.as_view(), - name='index_page'), + r'page//', # zjp: page参数为整数类型,表示页码 + views.IndexView.as_view(), # zjp: 复用IndexView处理分页逻辑 + name='index_page' + ), + + # zjp: 文章详情页 - 通过年份、月份、日期和文章ID访问具体文章 path( - r'article////.html', - views.ArticleDetailView.as_view(), - name='detailbyid'), + r'article////.html', # zjp: 多参数URL,包含时间信息和文章ID + views.ArticleDetailView.as_view(), # zjp: 文章详情类视图 + name='detailbyid' + ), + + # zjp: 分类详情页 - 显示指定分类下的所有文章 path( - r'category/.html', - views.CategoryDetailView.as_view(), - name='category_detail'), + r'category/.html', # zjp: slug类型参数,保证URL友好性 + views.CategoryDetailView.as_view(), # zjp: 分类文章列表视图 + name='category_detail' + ), + + # zjp: 分类详情分页 - 显示指定分类下指定页码的文章 path( - r'category//.html', - views.CategoryDetailView.as_view(), - name='category_detail_page'), + r'category//.html', # zjp: 分类名和页码组合参数 + views.CategoryDetailView.as_view(), # zjp: 复用分类视图处理分页 + name='category_detail_page' + ), + + # zjp: 作者详情页 - 显示指定作者的所有文章 path( - r'author/.html', - views.AuthorDetailView.as_view(), - name='author_detail'), + r'author/.html', # zjp: 作者名称参数 + views.AuthorDetailView.as_view(), # zjp: 作者文章列表视图 + name='author_detail' + ), + + # zjp: 作者详情分页 - 显示指定作者下指定页码的文章 path( - r'author//.html', - views.AuthorDetailView.as_view(), - name='author_detail_page'), + r'author//.html', # zjp: 作者名和页码组合参数 + views.AuthorDetailView.as_view(), # zjp: 复用作者视图处理分页 + name='author_detail_page' + ), + + # zjp: 标签详情页 - 显示指定标签下的所有文章 path( - r'tag/.html', - views.TagDetailView.as_view(), - name='tag_detail'), + r'tag/.html', # zjp: slug类型标签名参数 + views.TagDetailView.as_view(), # zjp: 标签文章列表视图 + name='tag_detail' + ), + + # zjp: 标签详情分页 - 显示指定标签下指定页码的文章 path( - r'tag//.html', - views.TagDetailView.as_view(), - name='tag_detail_page'), + r'tag//.html', # zjp: 标签名和页码组合参数 + views.TagDetailView.as_view(), # zjp: 复用标签视图处理分页 + name='tag_detail_page' + ), + + # zjp: 归档页面 - 显示所有文章按时间归档,使用缓存加速(缓存1小时) path( 'archives.html', - cache_page( - 60 * 60)( - views.ArchivesView.as_view()), - name='archives'), + cache_page(60 * 60)(views.ArchivesView.as_view()), # zjp: 缓存装饰器,缓存1小时(3600秒) + name='archives' + ), + + # zjp: 友情链接页面 - 显示所有友情链接 path( 'links.html', - views.LinkListView.as_view(), - name='links'), + views.LinkListView.as_view(), # zjp: 链接列表视图 + name='links' + ), + + # zjp: 文件上传接口 - 处理文件上传请求 path( r'upload', - views.fileupload, - name='upload'), + views.fileupload, # zjp: 使用函数视图处理文件上传 + name='upload' + ), + + # zjp: 缓存清理接口 - 清理系统缓存 path( r'clean', - views.clean_cache_view, - name='clean'), -] + views.clean_cache_view, # zjp: 使用函数视图处理缓存清理 + name='clean' + ), +] \ No newline at end of file -- 2.34.1 From 0f37a419c51c1f1183d8dde212731aa9e851058a Mon Sep 17 00:00:00 2001 From: djq <1092424998@qq.com> Date: Sun, 9 Nov 2025 16:47:19 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/blog/urls.py | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py index adf2703..44bb441 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/blog/urls.py @@ -1,3 +1,113 @@ +<<<<<<< HEAD +# 导入 Django 内置的路径配置工具和缓存装饰器 +from django.urls import path +from django.views.decorators.cache import cache_page + +# 导入当前应用(blog)的视图模块,用于关联路由与视图逻辑 +from . import views + +# 定义应用命名空间(namespace),用于在模板或反向解析时区分不同应用的路由 +# 例如:在模板中使用 {% url 'blog:index' %} 生成首页链接 +app_name = "blog" + +# 路由配置列表,每个 path 对应一个 URL 规则与视图的映射 +urlpatterns = [ + # 首页路由:匹配根路径(网站域名/) + path( + r'', # URL 路径表达式,空字符串表示根路径 + views.IndexView.as_view(), # 关联的视图类(IndexView),通过 as_view() 转换为可调用视图 + name='index' # 路由名称,用于反向解析(如 reverse('blog:index')) + ), + + # 分页首页路由:匹配带页码的首页(如 /page/2/) + path( + r'page//', # 是路径参数,int 表示接收整数类型,page 是参数名 + views.IndexView.as_view(), # 复用首页视图类,视图中会通过 page 参数处理分页 + name='index_page' + ), + + # 文章详情页路由:按日期和文章ID匹配(如 /article/2023/10/20/100.html) + path( + r'article////.html', + # 路径参数:year(年)、month(月)、day(日)、article_id(文章ID),均为整数 + views.ArticleDetailView.as_view(), # 文章详情视图类,处理文章展示逻辑 + name='detailbyid' + ), + + # 分类详情页路由:按分类名匹配(如 /category/tech.html) + path( + r'category/.html', + # :slug 类型表示接收字母、数字、下划线和连字符组成的字符串(适合URL友好的名称) + views.CategoryDetailView.as_view(), # 分类详情视图类,展示该分类下的文章 + name='category_detail' + ), + + # 分类详情分页路由:带页码的分类页(如 /category/tech/2.html) + path( + r'category//.html', + views.CategoryDetailView.as_view(), # 复用分类视图类,通过 page 参数分页 + name='category_detail_page' + ), + + # 作者详情页路由:按作者名匹配(如 /author/alice.html) + path( + r'author/.html', + # :未指定类型,默认接收字符串(除特殊字符外) + views.AuthorDetailView.as_view(), # 作者详情视图类,展示该作者的文章 + name='author_detail' + ), + + # 作者详情分页路由:带页码的作者页(如 /author/alice/2.html) + path( + r'author//.html', + views.AuthorDetailView.as_view(), # 复用作者视图类,通过 page 参数分页 + name='author_detail_page' + ), + + # 标签详情页路由:按标签名匹配(如 /tag/python.html) + path( + r'tag/.html', + views.TagDetailView.as_view(), # 标签详情视图类,展示该标签下的文章 + name='tag_detail' + ), + + # 标签详情分页路由:带页码的标签页(如 /tag/python/2.html) + path( + r'tag//.html', + views.TagDetailView.as_view(), # 复用标签视图类,通过 page 参数分页 + name='tag_detail_page' + ), + + # 归档页路由:匹配 /archives.html + path( + 'archives.html', + # 缓存装饰器:cache_page(60*60) 表示缓存该页面1小时(60秒*60),减轻服务器压力 + cache_page(60 * 60)(views.ArchivesView.as_view()), + name='archives' # 归档视图,通常展示按日期分组的文章列表 + ), + + # 友情链接页路由:匹配 /links.html + path( + 'links.html', + views.LinkListView.as_view(), # 友情链接视图类,展示网站链接列表 + name='links' + ), + + # 文件上传路由:匹配 /upload + path( + r'upload', + views.fileupload, # 关联函数视图(非类视图),处理文件上传逻辑 + name='upload' + ), + + # 缓存清理路由:匹配 /clean + path( + r'clean', + views.clean_cache_view, # 关联缓存清理视图,用于手动触发缓存清理 + name='clean' + ), +] +======= from django.urls import path from django.views.decorators.cache import cache_page @@ -60,3 +170,4 @@ urlpatterns = [ views.clean_cache_view, name='clean'), ] +>>>>>>> ccy_branch -- 2.34.1 From 17a547d7b4f612212e3886439be1efb152ff7a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=81=A5=E9=B9=8F?= <3331425936@qq.com> Date: Sun, 9 Nov 2025 16:59:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?zjp=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DjangoBlog-master/accounts/urls.py | 67 ++++++++++--------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/urls.py b/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/urls.py index 9eb1999..cf82b73 100644 --- a/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/urls.py +++ b/src/DjangoBlog-master(1)/DjangoBlog-master/accounts/urls.py @@ -1,42 +1,45 @@ +# zjp: 用户账户管理URL配置模块 +# zjp: 定义用户认证、注册、密码管理等账户相关功能的URL路由 + from django.urls import path from django.urls import re_path from . import views from .forms import LoginForm -# 定义应用的命名空间,用于反向解析URL +# zjp: 定义应用的命名空间,用于反向解析URL app_name = "accounts" -# URL模式配置 - 用户账户相关功能 +# zjp: URL模式配置 - 用户账户相关功能 urlpatterns = [ - # 用户登录 - re_path(r'^login/$', # 使用正则表达式匹配登录路径,必须以/login/结尾 - views.LoginView.as_view(success_url='/'), # 登录类视图,登录成功后跳转到首页 - name='login', # URL名称,用于反向解析 - kwargs={'authentication_form': LoginForm}), # 传递自定义登录表单类 - - # 用户注册 - re_path(r'^register/$', # 注册路径,必须以/register/结尾 - views.RegisterView.as_view(success_url="/"), # 注册类视图,注册成功后跳转到首页 - name='register'), # URL名称 - - # 用户退出登录 - re_path(r'^logout/$', # 退出登录路径,必须以/logout/结尾 - views.LogoutView.as_view(), # 退出登录类视图 - name='logout'), # URL名称 - - # 账户操作结果页面 - path(r'account/result.html', # 结果页面路径,使用path函数 - views.account_result, # 使用函数视图显示账户操作结果 - name='result'), # URL名称 - - # 忘记密码页面 - re_path(r'^forget_password/$', # 忘记密码路径,必须以/forget_password/结尾 - views.ForgetPasswordView.as_view(), # 忘记密码类视图 - name='forget_password'), # URL名称 - - # 忘记密码验证码处理 - re_path(r'^forget_password_code/$', # 忘记密码验证码路径,必须以/forget_password_code/结尾 - views.ForgetPasswordEmailCode.as_view(), # 忘记密码邮箱验证码类视图 - name='forget_password_code'), # URL名称 + # zjp: 用户登录功能 - 处理用户登录认证 + re_path(r'^login/$', # zjp: 使用正则表达式匹配登录路径,必须以/login/结尾 + views.LoginView.as_view(success_url='/'), # zjp: 登录类视图,登录成功后跳转到首页 + name='login', # zjp: URL名称,用于反向解析 + kwargs={'authentication_form': LoginForm}), # zjp: 传递自定义登录表单类,增强安全性 + + # zjp: 用户注册功能 - 处理新用户注册 + re_path(r'^register/$', # zjp: 注册路径,必须以/register/结尾 + views.RegisterView.as_view(success_url="/"), # zjp: 注册类视图,注册成功后跳转到首页 + name='register'), # zjp: URL名称,用于模板中的反向解析 + + # zjp: 用户退出登录功能 - 处理用户登出 + re_path(r'^logout/$', # zjp: 退出登录路径,必须以/logout/结尾 + views.LogoutView.as_view(), # zjp: 退出登录类视图,清理用户会话 + name='logout'), # zjp: URL名称,用于安全退出链接 + + # zjp: 账户操作结果页面 - 显示注册、登录等操作的结果信息 + path(r'account/result.html', # zjp: 结果页面路径,使用path函数定义静态URL + views.account_result, # zjp: 使用函数视图显示账户操作结果页面 + name='result'), # zjp: URL名称,用于操作完成后的跳转 + + # zjp: 忘记密码页面 - 处理密码重置请求 + re_path(r'^forget_password/$', # zjp: 忘记密码路径,必须以/forget_password/结尾 + views.ForgetPasswordView.as_view(), # zjp: 忘记密码类视图,处理密码重置逻辑 + name='forget_password'), # zjp: URL名称,用于密码重置入口 + + # zjp: 忘记密码验证码处理 - 接收和验证邮箱验证码 + re_path(r'^forget_password_code/$', # zjp: 忘记密码验证码路径,必须以/forget_password_code/结尾 + views.ForgetPasswordEmailCode.as_view(), # zjp: 忘记密码邮箱验证码类视图,处理验证逻辑 + name='forget_password_code'), # zjp: URL名称,用于验证码提交接口 ] \ No newline at end of file -- 2.34.1