# URL 路由配置 URL 路由是模块开发的最后一步,负责将 URL 路径映射到视图类。项目使用 Django 的 `path()` 函数定义路由,通过 `include()` 将模块路由注册到主路由。 ## 文件位置 ``` application/example/urls.py # 模块路由 application/urls.py # 主路由 ``` ## 模块路由配置 ### 完整代码 ```python from django.urls import path from application.example import views """ 案例模块路由配置 ============================================================= URL端点概览: ------------------------------------------------------------------------ | 功能说明 | 请求方法 | URL路径 | 视图类 | |-----------------|----------|-----------------------------|-------------------------| | 分页查询 | GET | /example/page | ExamplePageView | | 列表查询 | GET | /example/list | ExampleListView | | 详情查询 | GET | /example/detail/ | ExampleDetailView | | 添加案例 | POST | /example/add | ExampleAddView | | 更新案例 | PUT | /example/update | ExampleUpdateView | | 删除案例 | DELETE | /example/delete/| ExampleDeleteView | | 设置状态 | PUT | /example/status | ExampleStatusView | | 获取列表 | GET | /example/data | ExampleDataView | ------------------------------------------------------------------------ URL参数说明: - id: int类型,案例ID(用于查询详情) - id: str类型,逗号分隔的案例ID字符串(用于批量删除) 使用示例: 1. 分页查询:GET /api/example/page?pageNo=1&pageSize=10 2. 列表查询:GET /api/example/list 3. 详情查询:GET /api/example/detail/5 4. 添加案例:POST /api/example/add 5. 更新案例:PUT /api/example/update 6. 删除案例:DELETE /api/example/delete/1,2,3 7. 设置状态:PUT /api/example/status 8. 获取列表:GET /api/example/data """ # 案例模块路由配置 urlpatterns = [ # 查询案例分页列表 # URL: /example/page # 请求方法: GET # 功能: 获取案例分页数据,支持按案例名称、案例类型、案例状态等条件筛选 path('page', views.ExamplePageView.as_view()), # 查询案例数据列表(支持筛选) # URL: /example/list # 请求方法: GET # 功能: 获取所有案例的列表数据,支持按条件筛选,用于下拉选择等前端组件 path('list', views.ExampleListView.as_view()), # 查询案例详情 # URL: /example/detail/ # 请求方法: GET # URL参数: id - 案例ID(整数类型) # 功能: 根据ID获取指定案例的详细信息 path('detail/', views.ExampleDetailView.as_view()), # 添加案例 # URL: /example/add # 请求方法: POST # 功能: 创建新的案例记录,请求体需包含案例信息(name、avatar、type、status、sort等) path('add', views.ExampleAddView.as_view()), # 更新案例 # URL: /example/update # 请求方法: PUT # 功能: 更新现有案例信息,请求体需包含案例ID和更新内容 path('update', views.ExampleUpdateView.as_view()), # 删除案例 # URL: /example/delete/ # 请求方法: DELETE # URL参数: id - 案例ID字符串,支持单个ID或逗号分隔的多个ID(如 "1,2,3") # 功能: 删除指定案例(逻辑删除,设置is_delete=True) path('delete/', views.ExampleDeleteView.as_view()), # 设置案例状态 # URL: /example/status # 请求方法: PUT # 功能: 更新案例的启用/禁用状态 path('status', views.ExampleStatusView.as_view()), # 查询案例数据列表 # URL: /example/data # 请求方法: GET # 功能: 获取所有启用案例的列表数据,用于下拉选择等前端组件 path('data', 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 参数使用尖括号语法定义。