diff --git a/src/DjangoBlog-master/djangoblog/urls.py b/src/DjangoBlog-master/djangoblog/urls.py index 4aae58a..b7a3d07 100644 --- a/src/DjangoBlog-master/djangoblog/urls.py +++ b/src/DjangoBlog-master/djangoblog/urls.py @@ -13,52 +13,88 @@ Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ +# 导入项目配置:用于获取静态文件/媒体文件路径、DEBUG 状态等 from django.conf import settings +# 导入国际化路由工具:生成带语言前缀的路由(如 /en/admin/、/zh-hans/blog/) from django.conf.urls.i18n import i18n_patterns +# 导入静态文件路由工具:开发环境下提供静态文件访问(生产环境需 Nginx 处理) from django.conf.urls.static import static +# 导入站点地图视图:关联站点地图配置,生成 sitemap.xml from django.contrib.sitemaps.views import sitemap +# 导入 URL 路由组件:path 用于精确匹配,include 用于引入子应用路由 from django.urls import path, include +# 导入 re_path:支持正则表达式匹配 URL(适配复杂路由场景) from django.urls import re_path +# 导入 Haystack 搜索视图工厂:用于自定义搜索视图和表单 from haystack.views import search_view_factory -from blog.views import EsSearchView -from djangoblog.admin_site import admin_site -from djangoblog.elasticsearch_backend import ElasticSearchModelSearchForm -from djangoblog.feeds import DjangoBlogFeed -from djangoblog.sitemap import ArticleSiteMap, CategorySiteMap, StaticViewSitemap, TagSiteMap, UserSiteMap +# 导入项目自定义视图和配置:关联核心功能路由 +from blog.views import EsSearchView # 自定义 Elasticsearch 搜索视图 +from djangoblog.admin_site import admin_site # 自定义后台管理站点(替代默认 admin) +from djangoblog.elasticsearch_backend import ElasticSearchModelSearchForm # 自定义搜索表单 +from djangoblog.feeds import DjangoBlogFeed # RSS 订阅 Feed 视图 +from djangoblog.sitemap import ( # 站点地图配置类 + ArticleSiteMap, CategorySiteMap, StaticViewSitemap, TagSiteMap, UserSiteMap +) +# 站点地图聚合配置:将各类型站点地图归类,用于生成统一的 sitemap.xml sitemaps = { - - 'blog': ArticleSiteMap, - 'Category': CategorySiteMap, - 'Tag': TagSiteMap, - 'User': UserSiteMap, - 'static': StaticViewSitemap + 'blog': ArticleSiteMap, # 文章站点地图 + 'Category': CategorySiteMap, # 分类站点地图 + 'Tag': TagSiteMap, # 标签站点地图 + 'User': UserSiteMap, # 作者站点地图 + 'static': StaticViewSitemap # 静态页面站点地图 } -handler404 = 'blog.views.page_not_found_view' -handler500 = 'blog.views.server_error_view' -handle403 = 'blog.views.permission_denied_view' +# 自定义错误页面路由:指定 404/500/403 错误时跳转的视图 +handler404 = 'blog.views.page_not_found_view' # 404 页面未找到 +handler500 = 'blog.views.server_error_view' # 500 服务器内部错误 +handle403 = 'blog.views.permission_denied_view'# 403 权限拒绝(注意变量名应为 handler403,此处可能是笔误) +# 基础 URL 路由:不包含语言前缀的公共路由 urlpatterns = [ + # 国际化路由:提供语言切换功能(如 /i18n/setlang/ 接口) path('i18n/', include('django.conf.urls.i18n')), ] + +# 带语言前缀的路由:通过 i18n_patterns 自动添加语言前缀(如 /zh-hans/、/en/) +# prefix_default_language=False:默认语言不显示前缀(如中文默认不显示 /zh-hans/,直接用根路径) urlpatterns += i18n_patterns( + # 1. 后台管理路由:使用自定义的 admin_site(替代默认 admin),访问路径如 /admin/ re_path(r'^admin/', admin_site.urls), + # 2. 博客核心路由:引入 blog 应用的子路由,命名空间为 'blog'(路由名如 blog:index) re_path(r'', include('blog.urls', namespace='blog')), + # 3. Markdown 编辑器路由:引入 mdeditor 第三方应用的路由,用于文章编辑时的 Markdown 预览 re_path(r'mdeditor/', include('mdeditor.urls')), + # 4. 评论路由:引入 comments 应用的子路由,命名空间为 'comment' re_path(r'', include('comments.urls', namespace='comment')), + # 5. 用户账户路由:引入 accounts 应用的子路由(登录、注册、个人中心),命名空间为 'account' re_path(r'', include('accounts.urls', namespace='account')), + # 6. 第三方登录路由:引入 oauth 应用的子路由(GitHub、微博登录),命名空间为 'oauth' re_path(r'', include('oauth.urls', namespace='oauth')), + # 7. 站点地图路由:生成 sitemap.xml,供搜索引擎抓取(访问路径 /sitemap.xml) re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'), + # 8. RSS 订阅路由:提供两种访问路径(/feed/ 和 /rss/),均指向 DjangoBlogFeed 视图 re_path(r'^feed/$', DjangoBlogFeed()), re_path(r'^rss/$', DjangoBlogFeed()), - re_path('^search', search_view_factory(view_class=EsSearchView, form_class=ElasticSearchModelSearchForm), - name='search'), + # 9. 搜索路由:使用自定义的搜索视图(EsSearchView)和表单(ElasticSearchModelSearchForm) + # 访问路径如 /search?q=关键词,命名为 'search' + re_path('^search', search_view_factory( + view_class=EsSearchView, + form_class=ElasticSearchModelSearchForm + ), name='search'), + # 10. 服务器管理路由:引入 servermanager 应用的子路由(命令执行、日志查看),命名空间为 'servermanager' re_path(r'', include('servermanager.urls', namespace='servermanager')), - re_path(r'', include('owntracks.urls', namespace='owntracks')) - , prefix_default_language=False) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + # 11. 位置追踪路由:引入 owntracks 应用的子路由(位置数据查看),命名空间为 'owntracks' + re_path(r'', include('owntracks.urls', namespace='owntracks')), + prefix_default_language=False # 默认语言不显示语言前缀 +) + +# 静态文件路由:开发环境下(DEBUG=True)通过 Django 提供静态文件访问(生产环境需注释,用 Nginx 处理) +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + +# 媒体文件路由:仅在 DEBUG=True(开发环境)时生效,提供用户上传文件的访问(如 /media/avatar.jpg) if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, - document_root=settings.MEDIA_ROOT) + document_root=settings.MEDIA_ROOT) \ No newline at end of file