# URL 路由配置 URL 路由是模块开发的最后一步,负责将 URL 路径映射到视图类。项目使用 Django 的 `path()` 函数定义路由,通过 `include()` 将模块路由注册到主路由。 ## 文件位置 ``` application/example/urls.py # 模块路由 application/urls.py # 主路由 ``` ## 模块路由配置 ### 完整代码 ```python from django.urls import path from application.example import views urlpatterns = [ # 查询案例分页列表 path('page', views.ExamplePageView.as_view()), # 查询案例数据列表(支持筛选) path('list', views.ExampleListView.as_view()), # 查询案例详情 path('detail/', views.ExampleDetailView.as_view()), # 添加案例 path('add', views.ExampleAddView.as_view()), # 更新案例 path('update', views.ExampleUpdateView.as_view()), # 删除案例 path('delete/', views.ExampleDeleteView.as_view()), # 设置案例状态 path('status', views.ExampleStatusView.as_view()), # 查询案例数据列表 path('list', views.ExampleDataView.as_view()), ] ``` ### 路由说明 | URL 路径 | HTTP 方法 | 视图类 | 说明 | |:----|:----|:----|:----| | `page` | GET | `ExamplePageView` | 分页查询 | | `list` | GET | `ExampleListView` | 列表查询(不分页) | | `detail/` | GET | `ExampleDetailView` | 详情查询 | | `add` | POST | `ExampleAddView` | 添加记录 | | `update` | PUT | `ExampleUpdateView` | 更新记录 | | `delete/` | DELETE | `ExampleDeleteView` | 删除记录 | | `status` | PUT | `ExampleStatusView` | 状态更新 | | `list` | GET | `ExampleDataView` | 数据列表(下拉选择) | ### URL 参数类型 ```python # 整数参数 path('detail/', views.ExampleDetailView.as_view()) # 字符串参数(支持逗号分隔的多个ID) path('delete/', views.ExampleDeleteView.as_view()) ``` | 参数类型 | 说明 | 示例 | |:----|:----|:----| | `` | 整数参数 | `/example/detail/5` | | `` | 字符串参数 | `/example/delete/1,2,3` | ### 类视图转换 ```python path('page', views.ExamplePageView.as_view()) ``` Django 的类视图需要调用 `.as_view()` 方法将其转换为视图函数,这样才能被 `path()` 识别。 ## 主路由注册 ### 完整代码 ```python from django.contrib import admin from django.urls import path, include urlpatterns = [ # Django 自带的后台管理系统路由 path('admin/', admin.site.urls), # 登录模块路由 path('', include('application.login.urls')), # 系统主页模块路由 path('index/', include('application.index.urls')), # 文件上传模块路由 path('upload/', include('application.upload.urls')), # 职级管理模块路由 path('level/', include('application.level.urls')), # 岗位管理模块路由 path('position/', include('application.position.urls')), # 案例模块路由 path('example/', include('application.example.urls')), ] ``` ### include() 函数 ```python path('example/', include('application.example.urls')) ``` | 参数 | 说明 | |:----|:----| | `'example/'` | URL 前缀,所有以 `/example/` 开头的请求都会被转发 | | `include('application.example.urls')` | 包含模块的路由配置 | `include()` 函数会自动去掉前缀,将剩余部分传递给模块路由。例如: - 请求 URL:`/example/page` - 去掉前缀 `/example/` 后:`/page` - 匹配模块路由:`path('page', views.ExamplePageView.as_view())` ## 完整 URL 路径 注册到主路由后,完整的 API 路径如下: | 功能 | HTTP 方法 | 完整 URL | |:----|:----|:----| | 分页查询 | GET | `/api/example/page?pageNo=1&pageSize=10` | | 列表查询 | GET | `/api/example/list` | | 详情查询 | GET | `/api/example/detail/5` | | 添加记录 | POST | `/api/example/add` | | 更新记录 | PUT | `/api/example/update` | | 删除记录 | DELETE | `/api/example/delete/1,2,3` | | 状态更新 | PUT | `/api/example/status` | | 数据列表 | GET | `/api/example/list` | 注意:前端请求的 URL 以 `/api` 开头,这是因为 Vite 开发服务器配置了代理,将 `/api` 转发到 Django 后端。 ## 开发要点 1. **模块路由文件只定义相对路径**:不包含模块前缀 2. **主路由使用 `include()` 注册模块路由**:实现路由的模块化管理 3. **类视图必须调用 `.as_view()`**:转换为视图函数 4. **URL 参数使用尖括号语法**:`` 或 `` 5. **删除接口使用字符串参数**:支持逗号分隔的多个 ID 6. **路由注册后需要在 `application/urls.py` 中添加 include**:否则无法访问 ## 总结 URL 路由使用 Django 的 `path()` 定义,通过 `include()` 将模块路由注册到主路由。模块路由文件只定义相对路径,主路由负责添加模块前缀。类视图需要调用 `.as_view()` 转换为视图函数,URL 参数使用尖括号语法定义。